Converter unicode Ant\u00f4nio para Antônio

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

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:

Converter unicode Ant\u00f4nio para Antônio

Mensagem por ANDRIL »

Estou buscando informação em um webservice que retorna Ant\u00f4nio, ja tentei as opções de conversões abaixo e não funcionaram.

Código: Selecionar todos

cStr="Ant\u00f4nio"

?  'Directly             : ',HB_TRANSLATE (cStr,"UTF8","PT850")  
? 'UTF8toSTR            : ',hb_utf8tostr( cStr )
? 'OEMtoANSI + UTF8toSTR: ',hb_oemtoansi( hb_utf8tostr( cStr ) )
? 'ANSItoOEM + UTF8toSTR: ',hb_ansitooem( hb_utf8tostr( cStr ) )
? 'UTF8toSTR + OEMtoANSI: ',hb_utf8tostr( hb_oemtoansi( cStr ) )
? 'UTF8toSTR + ANSItoOEM: ',hb_utf8tostr( hb_ansitooem( cStr ) )
? 'OEMtoANSI            : ',hb_oemtoansi( cStr )
? 'ANSItoOEM            : ',hb_ansitooem( cStr )
Nenhuma retorna o texto certo.

Meu Harbour
Harbour 3.2.0dev (r1502201040)
Copyright (c) 1999-2015, http://harbour-project.org/

Harbour Build Info
---------------------------
Version: Harbour 3.2.0dev (r1502201040)
Compiler: MinGW GNU C 4.6.1 (32-bit)
Platform: Windows 7 6.1.7601 Service Pack 1
PCode version: 0.3
ChangeLog last entry: 2015-02-20 11:40 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
ChangeLog ID: 350e2f3890c9e3f66c52a809e8843645b9d816f1
Built on: Feb 21 2015 02:40:34
Build options: (Clipper 5.3b) (Clipper 5.x undoc)
---------------------------
Alguma idéia?
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Converter unicode Ant\u00f4nio para Antônio

Mensagem por Claudio Soto »

En Hb,
\u00f4

equivale a:
HB_UCHAR( 0x00f4 )
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Converter unicode Ant\u00f4nio para Antônio

Mensagem por Vlademiro »

Vc está setando algum codepage ?

Por exemplo

Código: Selecionar todos

REQUEST HB_CODEPAGE_PTISO

PROC MAIN

     HB_CDPSELECT( "PTISO" )


RETURN
Outra coisa, o codepage do seu editor de texto é o mesmo do codepage selecionado ?
Pode ser só esse o problema.
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Converter unicode Ant\u00f4nio para Antônio

Mensagem por Mario Mesquita »

Boa tarde a todos.

Estou com um problema parecido. Umas tabelas em ANSI que quero transformar em Unicode e essas funções não estão funcionando.

Acho que essa parte de converter a partir de Unicode eu resolvi, pois tive que importar umas coisas em XML que precisei converter.

Vou catar e colar aqui.

Mas essa parte de passar de ANSI pra Unicode, se laguém tiver uma dica, agradeço.

Saudações,
Mario.
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Converter unicode Ant\u00f4nio para Antônio

Mensagem por Mario Mesquita »

Olá.

Eu fiz assim:

Código: Selecionar todos

xLerResp := MemoRead(xArq)
xLerResp := StrTran(xLerResp, ">",   ">", 1)
xLerResp := StrTran(xLerResp, "<",   "<", 1)
xLerResp := StrTran(xLerResp, "&",  "&", 1)
xLerResp := StrTran(xLerResp, """, '"', 1)
Acho que isso é UTF-8, não?

De repente, ajuda a resolver.

Saudações,
Mario.
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Converter unicode Ant\u00f4nio para Antônio

Mensagem por Vlademiro »

É HTML.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Converter unicode Ant\u00f4nio para Antônio

Mensagem por JoséQuintas »

achei esta em php

Código: Selecionar todos

 static function Utf8_ansi($valor='') {

    $utf8_ansi2 = array(
    "\u00c0" =>"À",
    "\u00c1" =>"Á",
    "\u00c2" =>"Â",
    "\u00c3" =>"Ã",
    "\u00c4" =>"Ä",
    "\u00c5" =>"Å",
    "\u00c6" =>"Æ",
    "\u00c7" =>"Ç",
    "\u00c8" =>"È",
    "\u00c9" =>"É",
    "\u00ca" =>"Ê",
    "\u00cb" =>"Ë",
    "\u00cc" =>"Ì",
    "\u00cd" =>"Í",
    "\u00ce" =>"Î",
    "\u00cf" =>"Ï",
    "\u00d1" =>"Ñ",
    "\u00d2" =>"Ò",
    "\u00d3" =>"Ó",
    "\u00d4" =>"Ô",
    "\u00d5" =>"Õ",
    "\u00d6" =>"Ö",
    "\u00d8" =>"Ø",
    "\u00d9" =>"Ù",
    "\u00da" =>"Ú",
    "\u00db" =>"Û",
    "\u00dc" =>"Ü",
    "\u00dd" =>"Ý",
    "\u00df" =>"ß",
    "\u00e0" =>"à",
    "\u00e1" =>"á",
    "\u00e2" =>"â",
    "\u00e3" =>"ã",
    "\u00e4" =>"ä",
    "\u00e5" =>"å",
    "\u00e6" =>"æ",
    "\u00e7" =>"ç",
    "\u00e8" =>"è",
    "\u00e9" =>"é",
    "\u00ea" =>"ê",
    "\u00eb" =>"ë",
    "\u00ec" =>"ì",
    "\u00ed" =>"í",
    "\u00ee" =>"î",
    "\u00ef" =>"ï",
    "\u00f0" =>"ð",
    "\u00f1" =>"ñ",
    "\u00f2" =>"ò",
    "\u00f3" =>"ó",
    "\u00f4" =>"ô",
    "\u00f5" =>"õ",
    "\u00f6" =>"ö",
    "\u00f8" =>"ø",
    "\u00f9" =>"ù",
    "\u00fa" =>"ú",
    "\u00fb" =>"û",
    "\u00fc" =>"ü",
    "\u00fd" =>"ý",
    "\u00ff" =>"ÿ");

    return strtr($valor, $utf8_ansi2);      
}
https://stackoverflow.com/questions/706 ... sql-or-php

pesquisei no google por convert utf-8 \u00f4, que era a informação disponível
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Converter unicode Ant\u00f4nio para Antônio

Mensagem por Claudio Soto »

Genéricamente seria:
1) buscar en la cadena de texto la secuencia de escape \u
2) extraer los 4 siguientes caracteres que siguen a la secuencia \u, agregarle el prefijo "0x" y convertirlo en un valor numérico
3) remplazar en la cadena los 6 caracteres (\uXXXX) por hb_uchar (valor numérico del paso anterior )
4) reiniciar la búsqueda en el paso 1 hasta que se sustituyan todas las secuencias de escape \u

Nota: esto supone que no existen secuencia mal formadas, es decir que siguen el estandar de codificacion unicode de Html (luego de un \u siempre hay 4 caracteres hexadecimales validos)
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
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:

Converter unicode Ant\u00f4nio para Antônio

Mensagem por ANDRIL »

José, tinha isto em php também, porém estava buscando algo pronto em Harbour.
Mário, como o Vlademiro informou, isto é Html com caracteres especiais.
Vlademiro, uso HB_LANG_PT, HB_CODEPAGE_PT850.
Claudio Soto não conhecia esta Hb_Uchar(), legal. Porém teria um trabalho em localizar e extrair os codigos unicode para converter com esta função.

Vou ter que criar uma função de conversão baseado no código php.
Obrigado a todos pelas respostas.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Converter unicode Ant\u00f4nio para Antônio

Mensagem por Vlademiro »

Será se aquelas funções que vc postou não vão funcionar se estiver o codepage em UTF8 ?

Exemplo :

Código: Selecionar todos


REQUEST HB_CODEPAGE_UTF8EX // Disponibiliza o suporte a UTF8ex
REQUEST SUA CODEPAGE

Procedure Main()

   hb_cdpSelect( "sua codepage" )
...
... Na hora de pegar
   hb_cdpSelect("UTF8EX") // Seleciona o suporte a UTF8

... suas funções de conversão

   hb_cdpSelect( "sua codepage" )

Return 
Se puder criar uma função em arquivo separado, todo em UTF8, fazer as conversões e retornar para o seu projeto na codificação original também é um teste que vc poderia fazer.

Eu não desistiria das funções do Harbour nativas de conversão, acho que precisa incluir o codepage utf8.
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Converter unicode Ant\u00f4nio para Antônio

Mensagem por Vlademiro »

Fiz um teste aqui, olha se dá certo.
utf82padrao.prg
(385 Bytes) Baixado 93 vezes
O arquivo está com a codificação OEM850
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:

Converter unicode Ant\u00f4nio para Antônio

Mensagem por ANDRIL »

Vlademiro testei aqui seu prg e também não converte o meu texto, o seu sim, porem o meu texto tem outros caracteres como \u00f4 (UNICODE).
Mas obrigado por tentar ajudar.

Acabei fazendo a função de conversão e também foi útil por que no sistema não uso nada acentuado mesmo que o Harbour convertesse para um caracter da codepage acentuado não iria usar.

Código: Selecionar todos

FUNCTION Utf8_ansi(a,com_acento) 
*-- a = string onde ha texto com codigos UNICODE
*-- com_acento="SIM" retorna com acento, se "" ou nil retorna sem acento
 
LOCAL aUnicode :={}, saida, maxele,pos,pos1,i
aadd(aUnicode,{"\u00c0" ,"À","A"})
aadd(aUnicode,{"\u00c1" ,"Á","A"})
aadd(aUnicode,{"\u00c2" ,"Â","A"})
aadd(aUnicode,{"\u00c3" ,"Ã","A"})
aadd(aUnicode,{"\u00c4" ,"Ä","A"})
aadd(aUnicode,{"\u00c5" ,"Å","A"})
aadd(aUnicode,{"\u00c6" ,"Æ","A"})
aadd(aUnicode,{"\u00c7" ,"Ç","C"})
aadd(aUnicode,{"\u00c8" ,"È","E"})
aadd(aUnicode,{"\u00c9" ,"É","E"})
aadd(aUnicode,{"\u00ca" ,"Ê","E"})
aadd(aUnicode,{"\u00cb" ,"Ë","E"})
aadd(aUnicode,{"\u00cc" ,"Ì","I"})
aadd(aUnicode,{"\u00cd" ,"Í","I"})
aadd(aUnicode,{"\u00ce" ,"Î","I"})
aadd(aUnicode,{"\u00cf" ,"Ï","I"})
aadd(aUnicode,{"\u00d1" ,"Ñ","N"})
aadd(aUnicode,{"\u00d2" ,"Ò","O"})
aadd(aUnicode,{"\u00d3" ,"Ó","O"})
aadd(aUnicode,{"\u00d4" ,"Ô","O"})
aadd(aUnicode,{"\u00d5" ,"Õ","O"})
aadd(aUnicode,{"\u00d6" ,"Ö","O"})
aadd(aUnicode,{"\u00d8" ,"Ø","O"})
aadd(aUnicode,{"\u00d9" ,"Ù","U"})
aadd(aUnicode,{"\u00da" ,"Ú","U"})
aadd(aUnicode,{"\u00db" ,"Û","U"})
aadd(aUnicode,{"\u00dc" ,"Ü","U"})
aadd(aUnicode,{"\u00dd" ,"Ý","Y"})
aadd(aUnicode,{"\u00df" ,"ß","ß"})
aadd(aUnicode,{"\u00e0" ,"à","a"})
aadd(aUnicode,{"\u00e1" ,"á","a"})
aadd(aUnicode,{"\u00e2" ,"â","a"})
aadd(aUnicode,{"\u00e3" ,"ã","a"})
aadd(aUnicode,{"\u00e4" ,"ä","a"})
aadd(aUnicode,{"\u00e5" ,"å","a"})
aadd(aUnicode,{"\u00e6" ,"æ","æ"})
aadd(aUnicode,{"\u00e7" ,"ç","c"})
aadd(aUnicode,{"\u00e8" ,"è","e"})
aadd(aUnicode,{"\u00e9" ,"é","e"})
aadd(aUnicode,{"\u00ea" ,"ê","e"})
aadd(aUnicode,{"\u00eb" ,"ë","e"})
aadd(aUnicode,{"\u00ec" ,"ì","i"})
aadd(aUnicode,{"\u00ed" ,"í","i"})
aadd(aUnicode,{"\u00ee" ,"î","i"})
aadd(aUnicode,{"\u00ef" ,"ï","i"})
aadd(aUnicode,{"\u00f0" ,"ð","ð"})
aadd(aUnicode,{"\u00f1" ,"ñ","n"})
aadd(aUnicode,{"\u00f2" ,"ò","o"})
aadd(aUnicode,{"\u00f3" ,"ó","o"})
aadd(aUnicode,{"\u00f4" ,"ô","o"})
aadd(aUnicode,{"\u00f5" ,"õ","o"})
aadd(aUnicode,{"\u00f6" ,"ö","o"})
aadd(aUnicode,{"\u00f8" ,"ø","ø"})
aadd(aUnicode,{"\u00f9" ,"ù","u"})
aadd(aUnicode,{"\u00fa" ,"ú","u"})
aadd(aUnicode,{"\u00fb" ,"û","u"})
aadd(aUnicode,{"\u00fc" ,"ü","u"})
aadd(aUnicode,{"\u00fd" ,"ý","y"})
aadd(aUnicode,{"\u00ff" ,"ÿ","y"})
 
    saida=""
    maxele=len(a)
    for i=1 to maxele
    	pos=AT("\u",a)
    	if pos>0
    		saida+=substr(a,1,pos-1)
    		pos1=ASCAN(aUnicode,{|e| e[1]=substr(a,pos,6)})
    		if pos1>0
    			if empty(com_acento)
    			saida+=aUnicode[pos1][3] 
    			else
    			saida+=aUnicode[pos1][2] 
    			endif
    		else
    			saida+="?" 
    		endif 
    		a=substr(a,pos+6)
    	endif
    next
    saida+=a
    return saida; 
Uso para converter sem acentuação
Utf8_ansi(cSeutexto,"")
Uso para converter com acentuação equivalente a ANSI
Utf8_ansi(cSeutexto","SIM")
Agora começar a mexer com o HB_jsonDecode().

Obrigado a todos!
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Responder