Perl6 (Rakudo) - Как обрабатывать специальные символы из файла? - PullRequest
6 голосов
/ 15 марта 2019

Как я могу прочитать специальные символы из внешнего файла?Вот простой .txt файл на французском языке, содержание которого является первым абзацем https://fr.lipsum.com/: как вы можете видеть на моем скриншоте, кодировка файла - UTF-8, но акценты отображаются неправильно.

Я пробовал различные кодировки в notepad ++ и в моем скрипте perl6, например:

enc => "utf8"
enc => "latin1"

С скриптами Python или Ruby я не сталкиваюсь с проблемой.Я не могу найти точный пример по этому вопросу, вероятно, потому что Perl 6 еще совсем недавно (??).Спасибо.

Мой сценарий в том виде, в каком он показан на скриншоте:

my $text_contents = slurp "testfile.txt", enc => "utf8";
say $text_contents;
prompt;

Perl6 script, input file in notepad++, exec in cmd.exe


Окончательное редактирование :Решение состоит в том, чтобы включить опцию, доступную в бета-состоянии с Windows 10 1803, чтобы заставить ОС правильно обрабатывать символы Юникода: см. ответы и комментарии ниже ...

1 Ответ

5 голосов
/ 16 марта 2019

TL; DR Если вы используете Windows 10, вам, вероятно, нужно просто щелкнуть нужную опцию на панели управления.Если вы используете более старую версию, пожалуйста, сообщите нам, какую версию вы используете, и мы оттуда пойдем.


Похоже, ваша проблема в том, что кодировка вывода консоли не является utf8 и / илишрифт ANSI.

Aiui вы используете Microsoft Windows, возможно, Windows 10. Этот ответ предполагает, что это ваша корневая проблема, и решение сводится к:

  • Вам нужно будет по возможности полагаться на инструкции Microsoft по поддержке Unicode, если вы хотите, чтобы с ним работали такие современные программы с поддержкой Unicode, как P6 и компилятор Rakudo P6;

  • Если вы используете Windows 10, вам следует обратить внимание на их новую опцию «Бета: использовать Unicode UTF-8 для поддержки языковой поддержки во всем мире».Это находится под панелью управления, запись «Регион», вкладка «Административный», кнопка «Изменить локаль системы».(По иронии судьбы это говорит о том, что это программы, которые не поддерживают Unicode, но на самом деле это Microsoft Doublespeak.)


Цитирование страницы Википедии Unicode в Microsoft Windows :

они все еще в 2018 году улучшают поддержку своей операционной системы для UTF-8

Они отказались от своей поддержки Unicode за последние пару десятилетий.Они совсем недавно начали выкапывать выход из ямы, которую вырыли для себя и для всех остальных.Но они еще не готовы, по крайней мере, поскольку многие конечные пользователи не работают должным образом из коробки.Я думаю, что это корень вашей проблемы.

Более старые языки, такие как Python, Ruby и классическая серия Perl, предложили ряд запутанных хаков, которые скрывали многие проблемы с более старой поддержкой Microsoft UTF8 от большинства пользователей простымсценарии.(С обменом на то, что все становится очень волосатым или даже совершенно неработоспособным для чего-либо, кроме простых приложений во многих регионах мира. Настолько, что даже могущественная Microsoft наконец сдалась в 2018 году.)1034 * Добавление извилистых обходных путей в Rakudo - вещь с низким приоритетом по сравнению с новыми усилиями Microsoft по выполнению правильных действий.

Итак, вот что я предлагаю:

  • Есливы используете Windows 10, обратите внимание на новую «бета-версию: используйте Unicode UTF-8 для всемирной языковой поддержки» .Ожидайте, что это сработает, только если вам повезет.(Это все еще бета-статус.) Будьте терпеливы, если это не так.Мы сделаем все возможное в последнем случае, но он новый для всех.

  • Если вы используете более старую Windows, ожидайте, что не сработает сначалас современным программным обеспечением, если вы не очень счастливчик (и, кажется, вы не были).Мы все равно будем помогать, насколько сможем, но это, вероятно, потребует от вас терпения к нам, Microsoft, Rakudo и наоборот.

Без сомнения, будут добавлены практические обходные пути.со временем к Ракудо, когда вокруг него оседает пыль, и наступает новый этап доминирования Юникода, который, как написано в P6, принят по умолчанию.И Microsoft, вероятно, упростит, чтобы их технологии правильно работали с Unicode.Но пока решение сводится к выбору правильных параметров в Windows, и, похоже, вы этого еще не сделали.

...