Como posso converter caracteres não-ASCII codificados em UTF-8 para ASCII-equivalente em Perl?

votos
7

Eu tenho um script Perl que está sendo chamado por terceiros para me enviar nomes de pessoas que se inscreveram meu software. Uma dessas partes codifica os nomes em UTF-8, então eu adaptei meu script de acordo para decodificar UTF-8 para ASCII com Encode :: decode_utf8 (...).

Isso geralmente funciona bem, mas a cada 6 meses ou assim que um dos nomes contém caracteres cirílicos, gregos ou romeno, de modo a descodificar os resultados nome em caracteres de lixo como ПоÐ'Ñ € Ð ° жР° нÑкР° Ñ. Eu tenho que seguir-up com o cliente e pedir-lhe para uma versão em caracteres latinos de seu nome, a fim de emitir um código de registo.

Assim, há qualquer módulo Perl que pode detectar se existem tais personagens e automaticamente traduz-los para a sua representação mais próximo ASCII, se necessário?

Parece que eu posso usar Lingua :: cirílico :: Translit :: ICAO mais Lingua :: DetectCharset para lidar com cirílico, mas eu preferiria algo que funciona com outros conjuntos de caracteres também.

Publicado 12/03/2009 em 11:40
fonte usuário
Em outras línguas...                            


4 respostas

votos
12

Eu acredito que você poderia usar Text :: Unidecode para isso, é precisamente o que tenta fazer.

Respondeu 12/03/2009 em 15:21
fonte usuário

votos
0

Na documentação para Text :: Unicode, em "Avisos", parece que esta frase está incorreta:

Certifique-se de que os dados de entrada é realmente uma string utf8.

UTF-8 é uma codificação de comprimento variável, enquanto textos :: Unidecode só aceita uma codificação de comprimento fixo (de dois bytes) para cada caractere. Assim que a sentença deve ler:

Certifique-se de que os dados de entrada é realmente uma seqüência de dois bytes caracteres Unicode.

Isto também é referido como UCS-2.

Se você deseja converter cordas que realmente são utf8, você faria assim:

my $decode_status = utf8::decode($input_to_be_converted);
my $converted_string = unidecode ($input_to_be_converted);
Respondeu 30/09/2014 em 16:34
fonte usuário

votos
0

Se você receber texto cyrilic não há "representação ASCII mais próximo" para muitos personagens.

Respondeu 12/03/2009 em 15:25
fonte usuário

votos
0

Se você tem que lidar com UTF-8 dados que não estão na faixa ascii, a sua melhor aposta é a de mudar o seu backend para que ele não engasgar com utf-8. Como você iria sobre transliterando sinais kanji?

Respondeu 12/03/2009 em 12:05
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more