ROTINA CONVERTER XML ISO-8859-1

 Tópico anterior Próximo tópico Novo tópico

ROTINA CONVERTER XML ISO-8859-1

VB / VBA

 Compartilhe  Compartilhe  Compartilhe
#495397 - 19/10/2020 21:34:58

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Última edição em 19/10/2020 21:36:37 por ALVAROVB2009

Tenho um sistema em VB6 de captura de XML e estou tendo problemas de conversão

Pessoal alguém tem alguma rotina para poder converter a acentuação em arquivo XML gerado no padrão ISO-8859-1
Tenho uma rotina para o padrão UTF-8, más que não funciona mais porque o padrão foi alterado para esse ISO

Não tenho tempo para desenvolver em outra linguagem e preciso ajustar esse problema, procurei na net algum tipo de conversão e não achei nada

Estou tentando usar o webbrowser do VB6, porém ao abrir o arquivo XML nele até aceitou a conversão de caracteres, más não esta batendo a quantidade de linhas, e não quero arriscar a perder dados
A quantidade de linha varia muito, más o menor arquivo tem mais de 200 linhas

Então quero substituir a rotina que tenho de conversão UTF e depois com calma vejo o porque da diferença de linhas

Agradeço desde já a ajuda


Teoria quando se sabe tudo, e nada funciona. Prtica e quando tudo funciona e ningum sabe porque.
[]Aquele que quer aprender gosta que lhe digam quando esta errado;
s o tolo no gosta de ser corrigido -[]Prov.12:1


#495400 - 21/10/2020 10:41:04

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Alguém tem alguma solução, esqueci de colocar

Quando eu puxo o xml do servidor que faço a consulta, ele já vem com os caracteres estranhos
O pessoal lá me falou que eles estão usando o padrão ISO-8859

Dim Obj As MSXML2.ServerXMLHTTP
Set Obj = New MSXML2.ServerXMLHTTP
Obj.Open 'GET', 'https://www.servidor.com.br/ws_app/vendas_by_nr?sessao=' & LoginEntrada & '&vendas=' & Nvendas
Obj.send

Aqui ja crio um arquivo com os dados capturados, pois é uma grande sequencia que tenho que pegar, e somente depois que tenho que tratar esses arquivos
    Open App.Path & '\vendas.xml' For Binary Access Write As #1
        Put #1, , Obj.responseText
    Close #1




Essa é forma que vou até o servidor deles, tem alguma configuração nesse serverXML do vb6 onde eu possa colocar o padrão para ele capturar os dados já com a acentuação convertida corretamente?

Teoria quando se sabe tudo, e nada funciona. Prtica e quando tudo funciona e ningum sabe porque.
[]Aquele que quer aprender gosta que lhe digam quando esta errado;
s o tolo no gosta de ser corrigido -[]Prov.12:1


#495402 - 21/10/2020 13:49:36

LVFIOROT
SERRA
Cadast. em:Março/2012


Última edição em 21/10/2020 13:57:30 por LVFIOROT

veja se ajuda....

https://stackoverflow.com/questions/21883647/xmlhttp-read-iso-8859-2-content-and-write-utf-8

https://www.tek-tips.com/viewthread.cfm?qid=1526174

como não tenho um url que responda em iso-8859, nao tenho como testar

https://www.google.com/search?q=MSXML2.ServerXMLHTTP+ISO-8859&oq=MSXML2.ServerXMLHTTP+ISO-8859&aqs=chrome..69i57.1540j0j7&sourceid=chrome&ie=UTF-8




#495403 - 21/10/2020 14:58:13

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


 Anexos estao visíveis somente para usuários registrados

LVFIOROT obrigado pela resposta

Peguei esse link e consegui pegar o esquema que é para ASP, más adaptei para o vb6, porém continuou a mesma coisa, estou abrindo meu XML e ele não esta fazendo a conversão

Public Function DecodeUTF8(s)
Dim stmANSI
  Set stmANSI = CreateObject('ADODB.Stream')
  s = s & ''
  On Error Resume Next

  With stmANSI
    .Open
    .Position = 0
    .Charset = 'ISO-8859'  '  linha original .CharSet = 'Windows-1252'
    .WriteText s
    .Position = 0
    .Charset = 'UTF-8' ' troquei aqui também, más deixei agora a linha original
  End With

  UTF8_Encode = stmANSI.ReadText
  stmANSI.Close

  If Err.Number <> 0 Then
    MsgBox Err.Description
    UTF8_Encode = s
  End If
  On Error GoTo 0
End Function


Já andei trocando as opções no charset ('ISO-8859' 'ISO-8859-1') porém nenhuma conseguiu ajustar a acentuação
Coloquei uma cópia do meu arquivo xml gerado, para ver como que ele fica no arquivo, pois é o que eu faço, pego a resposta do servidor e gravo em um arquivo e vou buscar outro, pois o tempo que tenho que fazer a busca é curto e são muitos arquivos

deixei o arquivo como txt para poder anexar aqui


Teoria quando se sabe tudo, e nada funciona. Prtica e quando tudo funciona e ningum sabe porque.
[]Aquele que quer aprender gosta que lhe digam quando esta errado;
s o tolo no gosta de ser corrigido -[]Prov.12:1


#495404 - 21/10/2020 15:16:37

LVFIOROT
SERRA
Cadast. em:Março/2012


Última edição em 21/10/2020 15:30:14 por LVFIOROT

 Anexos estao visíveis somente para usuários registrados


desse modo que está escrito o arquivo, precisa usar encode/decode direto do objeto, pois o proprio arquivo está escrito em utf-8




#495405 - 21/10/2020 15:44:03

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


Pois é , por isso que eu coloquei lá em cima o comando
Dim Obj As MSXML2.ServerXMLHTTP
Set Obj = New MSXML2.ServerXMLHTTP
Obj.Open 'GET', 'https://www.servidor.com.br/ws_app/vendas_by_nr?sessao=' & LoginEntrada & '&vendas=' & Nvendas
Obj.send

Open App.Path & '\vendas.xml' For Binary Access Write As #1
     Put #1, , Obj.responseText
Close #1


Porque eu utilizo a url de chamada conforme eles passaram, será que não tem como forçar e colocar o padrão ISO-8859 nessa chamada?
Estou usando a referencia do próprio vb6 Microsoft XML, 3.0

Teoria quando se sabe tudo, e nada funciona. Prtica e quando tudo funciona e ningum sabe porque.
[]Aquele que quer aprender gosta que lhe digam quando esta errado;
s o tolo no gosta de ser corrigido -[]Prov.12:1


Resposta escolhida #495407 - 21/10/2020 17:05:41

LVFIOROT
SERRA
Cadast. em:Março/2012


veja assim, aqui rolou com o seu arquivo.

https://stackoverflow.com/questions/60666733/vb6-vba-how-to-write-xml-file-in-utf-8-with-bom

Private Sub Form_Load()

''E:\teste.xml

Dim doc As MSXML2.DOMDocument60
Set doc = New MSXML2.DOMDocument60

doc.Load 'E:\teste.xml'
mSaveToFile doc, 'E:\teste_utf.xml'

End Sub


Private Sub mSaveToFile(ByVal oDoc As MSXML2.DOMDocument60, ByVal sFilename As String)
    Dim oStream As ADODB.Stream
    Dim oWriter As MSXML2.MXXMLWriter60
    Dim oReader As MSXML2.SAXXMLReader60

    Set oStream = New ADODB.Stream
    oStream.Open
    oStream.Type = adTypeBinary

    Set oWriter = New MSXML2.MXXMLWriter60
    'if not set (even to False), '.encoding' is ignored
    oWriter.byteOrderMark = True
    oWriter.output = oStream
    oWriter.indent = True
    oWriter.standalone = True
    oWriter.omitXMLDeclaration = False
    'UTF-8 will never write a BOM, no matter what '.byteOrderMark' says
    oWriter.encoding = 'utf-8'



    Set oReader = New MSXML2.SAXXMLReader60
    Set oReader.contentHandler = oWriter
    Set oReader.dtdHandler = oWriter
    Set oReader.errorHandler = oWriter

    Call oReader.parse(oDoc.xml)

    Call oStream.SaveToFile(sFilename, adSaveCreateOverWrite)
    oStream.Close

End Sub





#495408 - 21/10/2020 17:06:06

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Amigo, 'não tem tempo de desenvolver em outra linguagem' desde o dia 19. Se fizer isso com .NET(que vai levar literamente minutinhos) já estaria resolvido.

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#495410 - 21/10/2020 18:54:00

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


LVFIOROT vlw a ajuda, deu certinho para o que eu precisava


KERPLUNK, obrigado pelo retorno
Realmente não tenho tempo para desenvolver, porque essa não é uma simples rotina só para pegar o XML,
Quem montou esse sistema não separou por módulo e fez tudo na sequência, por isso que não tem como fazer em outra linguagem essa baixa do XML e existem várias verificações de segurança com a internet e verificação se o arquivo é válido, pois o sistema roda sózinho na madrugada
Depois com mais tempo, até poderei separar para poder facilitar possíveis manutenções, até eu ter experiência e passar para C#

Senão for abusar, teria como deixar como seria esse esquema para baixar esse XML em C#

Teoria quando se sabe tudo, e nada funciona. Prtica e quando tudo funciona e ningum sabe porque.
[]Aquele que quer aprender gosta que lhe digam quando esta errado;
s o tolo no gosta de ser corrigido -[]Prov.12:1


#495411 - 21/10/2020 19:04:23

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe

WebClient client = new WebClient ();
string s = client.DownloadString('https://www.servidor.com.br/ws_app/vendas_by_nr?sessao=' & LoginEntrada & '&vendas=' & Nvendas');


Aqui 's' já conterá o conteúdo(adapte a url certinho)

Se quiser salvar em um arquivo:

System.IO.File.WriteAllText(@'C:\pasta\arqivo.xml', text);


_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#495412 - 21/10/2020 20:17:41

ALVAROVB2009
GUARULHOS
Cadast. em:Maio/2009


KERPLUNK, obrigado pelo retorno
Realmente seria bem rápido mesmo, já estou até imaginando alguma coisa que posso fazer, separar os sistemas

Criar em C# a busca de todos os Xml's e deixar em Vb6 a gravação dos dados no banco, assim eu não mudaria muita coisa

Vou encerrar o tópico senão vou me empolgando e perguntando um monte de coisa e acabo não ajustando

Teoria quando se sabe tudo, e nada funciona. Prtica e quando tudo funciona e ningum sabe porque.
[]Aquele que quer aprender gosta que lhe digam quando esta errado;
s o tolo no gosta de ser corrigido -[]Prov.12:1


 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por ALVAROVB2009 em 21/10/2020 20:17:54