Página 2 de 2

Re: Converte caracteres padrão DOS/OEM pra WIN/ANSI e vice-versa

Enviado: 02 Mar 2010 21:16
por Laudelino Scarmagnani
Valeu!
Usei a rotina do Pablo, mas salvei a do Toledo também.
Desta vez, funcionou.
Obridão a todos!
Laudelino.

Converte caracteres padrão DOS/OEM pra WIN/ANSI e vice-versa

Enviado: 18 Ago 2012 12:12
por ANDRIL
Baixei a função e ao testar utilizando um retorno da função de consultar cep https://pctoledo.org/forum/viewto ... 43&t=13329 o endereco de retorno deste cep 08485-010 que traz o carater Igarapé da Missão tanto ele minisculo como convertendo para maiusculo nao se tem a conversão correta, ficando IgarapU da MissOO. Utilizei o metodo ANSI to OEM, e mesmo de OEM para ANSI como ja era esperado, não deu certo.

Abraços

Converte caracteres padrão DOS/OEM pra WIN/ANSI e vice-versa

Enviado: 18 Ago 2012 12:49
por Jairo Maia
Olá Andril,

Com o exemplo abaixo funciona corretamente.

PS: Veja que o traço (99999-999) faz parte do CEP, pois montei para testar o servidor do José Quintas. Para o Republica Virtual por exemplo, o traço não pode fazer parte do CEP.

PS1: Os códigos foram extraídos de idéias postadas por colegas neste fórum.

Código: Selecionar todos

// Compilar: HBMK2 nome_exemplo -lxhb

#include "hbdyn.ch"

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
REQUEST HB_GT_WVT_DEFAULT

Function Main()
Local getlist := {}, nHandleDLL, nStatus, cBuf, cUf, cCid, cBai, cRua

Clear Screen

If !Internet()
 Return
Endif

HB_LANGSELECT( "PT" )
HB_SETCODEPAGE( "PT850" )

cCep=Space( 9 )
@ 10,10 Say "Informe o CEP: " Get cCep Pict "!!!!!-!!!"
Read

nHandleDLL:=HB_LibLoad( "UrlMon.dll" )
nStatus:=HB_DynCall( { "URLDownloadToFileA", nHandleDLL, HB_DYN_CALLCONV_STDCALL}, 0, "http://www.jpatecnologia.com.br/cep.asp?cep=" + cCep + "&formato=xml", "ENDERECO.XML", 0, 0 )
cBuf:=MemoRead("ENDERECO.XML")

cUf  := substr(cBuf, at('<uf>', cBuf) + 4, at('</uf>', cBuf) - (at('<uf>', cBuf) + 4))
cCid := substr(cBuf, at('<cidade>', cBuf) + 8, at('</cidade>', cBuf) - (at('<cidade>', cBuf) + 8))
cBai := substr(cBuf, at('<bairro>', cBuf) + 8, at('</bairro>', cBuf) - (at('<bairro>', cBuf) + 8))
cRua := substr(cBuf, at('<logradouro>', cBuf) + 12, at('</logradouro>', cBuf) - (at('<logradouro>', cBuf) + 12))

@ 12,10 SAY "Rua......: " + HB_AnsiToOem(cRua)
@ 13,10 SAY "Bairro...: " + HB_AnsiToOem(cBai)
@ 14,10 SAY "Cidade...: " + HB_AnsiToOem(cCid)
@ 15,10 SAY "Estado...: " + HB_AnsiToOem(cUf)

InKey(0)

Return Nil

Function Internet( cAddress )
Local aHosts
If cAddress == NIL
 cAddress := "www.google.com.br"
Endif
InetInit()
aHosts := InetGetHosts( cAddress )
If aHosts == Nil .Or. len( aHosts ) = 0
 InetCleanUp()
 Return .f.
Endif
InetCleanUp()
Return .t.

Converte caracteres padrão DOS/OEM pra WIN/ANSI e vice-versa

Enviado: 18 Ago 2012 13:45
por ANDRIL
Olá Jairo Maia, pelo que tinha pesquisado a função HB_AnsiToOem() retornava o que eu preciso, porem, o sistema esta em Clipper 5.2e. A função do Pablo/Toledo resolveria o problema, mais ocorre o que postei acima.
Abraços

Converte caracteres padrão DOS/OEM pra WIN/ANSI e vice-versa

Enviado: 18 Ago 2012 20:14
por Pablo César
Olá Anderson,

Explique de que forma você consegue obter o nome da cidade "Igarapé da Missão", isto é, de que forma você passa para sua aplicação Clipper ?

Pois eu fiz o teste (aqui em anexo) e converte normal. Se você pegar o nome da cidade "Igarapé da Missão" e gravar no Notepad (por exemplo) ele vai gravar em ANSI. Mas se você pegar o editor QEdit ele irá ler outros caracteres, exibindo desta forma: "IgarapÚ da MissÒo".

Tenho que entender como você passa esse valor em ANSI para o Clipper, pode ser que aí esteja o erro.

Veja o exemplo e você entenderá o que estou dizendo. O exemplo em anexo grava em arquivo .txt

Converte caracteres padrão DOS/OEM pra WIN/ANSI e vice-versa

Enviado: 19 Ago 2012 17:07
por ANDRIL
Pablo César escreveu:O exemplo em anexo grava em arquivo .txt
Olá Pablo, exatamente, no exemplo "voce" gravou através do comando do Clipper, assim a função funciona como esperado.

O problema de conversão ocorre do resultado obtido do webservice, o qual coloquei em anexo para que possa ver, ocorre o que voce postou sobre o editor QEdit.

Obrigado pelo retorno.

Converte caracteres padrão DOS/OEM pra WIN/ANSI e vice-versa

Enviado: 19 Ago 2012 18:35
por Pablo César
Oi Anderson, continuo sem entender direito. Esse arquivo leu.txt é o arquivo obtido do Web site ?

Se for então é só ler o arquivo e utilizar a função WINCAR("W2D",MemoRead("Leu.txt")), aqui pra mim está funcionando. Não estou entendendo qual é o seu problema, me desculpe.

Se esse arquivo leu.txt foi gravado dessa forma, então está correto, mas se você pegar um editor puro OEM não dará certo. Ainda preciso saber como é vindo a string do web site.

Anexei o exemplo lendo o seu arquivo e o resultado é positivo. Confira.

Converte caracteres padrão DOS/OEM pra WIN/ANSI e vice-versa

Enviado: 19 Ago 2012 19:42
por Jairo Maia
Olá Pessoal,
Pablo César escreveu:Ainda preciso saber como é vindo a string do web site.
Penso que o resultado do site está vindo em UTF-8, por isso essa dificuldade com os caracteres acentuados. Em clipper não sei como fazer a conversão.

Converte caracteres padrão DOS/OEM pra WIN/ANSI e vice-versa

Enviado: 20 Ago 2012 16:28
por sygecom
O Jairo tem razão é UTF8 que chega o retorno do WEBSERVICE em xHarobur tem funções especificas para isso:
hb_UTF8ToStr()
hb_StrToUTF8()
Andril,
Se procurar pelo fórum vai achar um EXE que uma vez um colega criou em xHarbour para o pessoal do Clipper usar essa conversão.

Converte caracteres padrão DOS/OEM pra WIN/ANSI e vice-versa

Enviado: 21 Ago 2012 06:50
por ANDRIL
Jairo Maia escreveu:resultado do site está vindo em UTF-8
Também desconfio disso. Pensando nisso, para não utilizar um EXE extra, postarei no topico referente a consulta de CEP, para que o colega se puder, coloque a codificação da página com o charset em português/br quem sabe resolve.

Obrigado a todos pela ajuda.
Abraços