UTF8에서 인코딩 된 비 ASCII 문자를 PERL에서 Ascii-Equivalent로 변환하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/638060

문제

제 3자가 내 소프트웨어를 등록한 사람들의 이름을 보내달라고 Perl 스크립트가 있습니다. 이 당사자 중 하나는 UTF-8에서 이름을 인코딩하므로 encode :: decode_utf8 (...)을 사용하여 UTF-8을 ASCII로 Decode에 따라 스크립트를 조정했습니다.

이것은 일반적으로 잘 작동하지만 6 개월마다마다 키릴, 그리스어 또는 루마니아 문자가 포함되어 있으므로 이름을 해독하면 "ðÿð¾ð´ñ € ° ° ° ° ° ð에서 ½ ñð ° °"와 같은 쓰레기 문자가 생성됩니다. 나는 고객과 후속 조치를 취하고 등록 코드를 발행하기 위해 그의 이름의 "라틴 문자 버전"을 요청해야합니다.

그렇다면 그러한 문자가 있는지 여부를 감지하고 필요한 경우 가장 가까운 ASCII 표현으로 자동 번역 할 수있는 PERL 모듈이 있습니까?

링구아 :: cyrillic :: translit :: icao plus lingua :: cyrillic을 처리하기 위해 Chargect를 사용할 수 있지만 다른 캐릭터 세트와 함께 작동하는 것을 선호합니다.

도움이 되었습니까?

해결책

나는 당신이 사용할 수 있다고 생각합니다 텍스트 :: Unidecode 이를 위해서는 정확하게 시도하는 것입니다.

다른 팁

ASCII 범위에 있지 않은 UTF-8 데이터를 처리 해야하는 경우 가장 좋은 방법은 백엔드를 변경하여 UTF-8에서 질식하지 않는 것입니다. Kanji 간판을 음역하는 방법은 무엇입니까?

키릴 릭 텍스트를 받으면 많은 캐릭터에 대해 "가장 가까운 ASCII 표현"이 없습니다.

"경고"아래 텍스트에 대한 문서 :: 유니 코드 에서이 문구가 잘못된 것으로 보입니다.

입력 데이터가 실제로 UTF8 문자열인지 확인하십시오.

UTF-8은 가변 길이 인코딩 인 반면, 텍스트 :: unidecode는 각 문자에 대한 고정 길이 (2 바이트) 인코딩 만 허용합니다. 그 문장은 다음과 같이 읽어야합니다.

입력 데이터가 실제로 2 바이트 유니 코드 문자열인지 확인하십시오.

이것은 UCS-2라고도합니다.

실제로 UTF8 인 문자열을 변환하려면 그렇게 할 것입니다.

my $decode_status = utf8::decode($input_to_be_converted);
my $converted_string = unidecode ($input_to_be_converted);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top