Página 1 de 1

Converter unicode Ant\u00f4nio para Antônio

Enviado: 07 Ago 2020 10:50
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?

Converter unicode Ant\u00f4nio para Antônio

Enviado: 07 Ago 2020 12:11
por Claudio Soto
En Hb,
\u00f4

equivale a:
HB_UCHAR( 0x00f4 )

Converter unicode Ant\u00f4nio para Antônio

Enviado: 07 Ago 2020 12:12
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.

Converter unicode Ant\u00f4nio para Antônio

Enviado: 07 Ago 2020 12:27
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.

Converter unicode Ant\u00f4nio para Antônio

Enviado: 07 Ago 2020 12:34
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.

Converter unicode Ant\u00f4nio para Antônio

Enviado: 07 Ago 2020 12:48
por Vlademiro
É HTML.

Converter unicode Ant\u00f4nio para Antônio

Enviado: 07 Ago 2020 13:42
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

Converter unicode Ant\u00f4nio para Antônio

Enviado: 07 Ago 2020 14:00
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)

Converter unicode Ant\u00f4nio para Antônio

Enviado: 07 Ago 2020 14:20
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.

Converter unicode Ant\u00f4nio para Antônio

Enviado: 07 Ago 2020 17:14
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.

Converter unicode Ant\u00f4nio para Antônio

Enviado: 07 Ago 2020 17:35
por Vlademiro
Fiz um teste aqui, olha se dá certo.
utf82padrao.prg
(385 Bytes) Baixado 94 vezes
O arquivo está com a codificação OEM850

Converter unicode Ant\u00f4nio para Antônio

Enviado: 07 Ago 2020 18:47
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!