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

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Laudelino Scarmagnani
Usuário Nível 3
Usuário Nível 3
Mensagens: 303
Registrado em: 07 Fev 2007 10:54

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

Mensagem por Laudelino Scarmagnani »

Valeu!
Usei a rotina do Pablo, mas salvei a do Toledo também.
Desta vez, funcionou.
Obridão a todos!
Laudelino.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

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

Mensagem 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
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

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

Mensagem 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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

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

Mensagem 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
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

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

Mensagem 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
Anexos
Converte.rar
(67.94 KiB) Baixado 321 vezes
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

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

Mensagem 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.
Anexos
leu.txt
(227 Bytes) Baixado 290 vezes
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

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

Mensagem 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.
Anexos
Converte.rar
(68.28 KiB) Baixado 329 vezes
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

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

Mensagem 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.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

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

Mensagem 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.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

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

Mensagem 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
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Responder