Perl Text :: Unidecode не выдает правильный вывод - PullRequest
1 голос
/ 10 ноября 2019

Я пытаюсь использовать Text::Unidecode для преобразования всех акцентированных символов (é, ç, è, à и т. Д.) В текстовом файле в их не акцентированные аналоги (в данном случае e, c, e, a). Функция unidecode() должна делать именно это, но я получаю странный вывод ...

Кажется, что каждый акцентированный символ заменяется на 'A', за которым следуют один или два других символа. Например, ввод "éèçàöôäüû" производит вывод "A(c)A"ASSA APA'A$?A1/4A>>".

Функция работает нормально, если я использую ее в некоторой определенной пользователем строке в сценарии, но не когда я использую ее в цикле while, напримерthis:

#!/bin/usr/perl
use utf8;
use Text::Unidecode;
while(<>){
    print(unidecode($_));
}
#end

Проблема сохраняется с или без use utf8;, но может ли текстовый файл по-прежнему вызывать проблемы? Это известная проблема с модулем?

1 Ответ

4 голосов
/ 10 ноября 2019

use utf8 сообщает Perl, какую кодировку вы используете в исходном коде. Чтобы установить кодировку ввода, используйте

use open IN => ':encoding(UTF-8)', ':std';

Или, если вы не читаете из файла, установите кодировку дескриптора * STDIN:

binmode *STDIN, ':encoding(UTF-8)';

См. open и binmode .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...