Японские символы интерпретируются как контрольные символы - PullRequest
0 голосов
/ 15 марта 2019

У меня есть несколько файлов, которые содержат различные строки на разных письменных языках. Файлы, с которыми я работаю, имеют формат .inf, который несколько похож на файлы .ini.

Я ввожу текст из этих файлов в анализатор, который рассматривает символ [ как начало «категории». Поэтому важно, чтобы этот символ случайно не появлялся в последовательностях строк, иначе синтаксический анализ не удастся, поскольку он интерпретирует их как «управляющие символы».

Например, эта строка содержит некоторые японские надписи:

iANSProtocol_HELP="�C���e��(R) �A�h�o���X�g�E�l�b�g���[�N�E�T�[�r�X Protocol �̓`�[���������щ��z LAN �Ȃǂ̍��x�@�\�Ɏg�����܂��B"
DISKNAME         ="�C���e��(R) �A�h�o���X�g�E�l�b�g���[�N�E�T�[�r�X CD-ROM �܂��̓t���b�s�[�f�B�X�N"

В моей кодировке UTF-8 по умолчанию для текстовых редакторов (Atom) это дает мне мусорный текст, который не будет проблемой, однако символ 0x5B интерпретируется как [. Что приводит к сбою синтаксического анализатора, поскольку предполагается, что это сигнализирует о начале новой категории.

Если я изменю кодировку на японский (CP 932), эти символы будут правильно интерпретироваться как:

iANSProtocol_HELP="インテル(R) アドバンスト・ネットワーク・サービス Protocol はチーム化および仮想 LAN などの高度機能に使われます。"
DISKNAME         ="インテル(R) アドバンスト・ネットワーク・サービス CD-ROM またはフロッピーディスク"

Конечно, я не могу закодировать каждый файл на японском, потому что он может содержать китайский или другие языки, которые будут написаны неправильно.

Как лучше всего действовать в этой ситуации? Должен ли я редактировать код парсера, чтобы экранировать символы внутри строковых литералов? Существуют ли какие-либо специальные типы кодирования, которые позволили бы мне видеть все специальные символы и языки?

Спасибо

1 Ответ

0 голосов
/ 15 марта 2019

Если исходный файл находится в shift-jis, то вам следует использовать анализатор, который может его поддерживать, или преобразовать файл в UTF-8, прежде чем анализировать его.

Я считаю, что этот набор символов также использует ASCII в качестве базового типа, но он использует 2 байта для определенных символов, поэтому если 0x5B, он, вероятно, не отображается как «первый байт» символа. (примечание: это предположение, основанное на том, как я думаю shift-jis работает).

Так что, да, вам нужно изменить свой синтаксический анализатор для понимания shift-jis, или вам нужно конвертировать файл в UTF-8 перед анализом. Я полагаю, что преобразование является самым простым.

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