日语字符被解释为控制字符

时间:2019-03-15 01:58:29

标签: parsing encoding utf-8

我有几个文件,其中包括使用不同书面语言的各种字符串。我正在使用的文件是.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"

在我的文本编辑器(Atom)中,默认的UTF-8编码为我提供了垃圾文本,这不是问题,但是0x5B字符被解释为[。这会导致解析器失败,因为它假定这标志着新类别的开始。

如果我将编码更改为日语(CP 932),则这些字符将正确解释为:

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

我当然不能将每个文件都编码为日语,因为它们可能包含中文或其他语言,这些语言将被错误地编写。

在这种情况下最好的行动方案是什么?是否应该编辑解析器的代码以转义字符串文字中的字符?是否有任何特殊类型的编码可以让我看到所有特殊字符和语言?

谢谢

1 个答案:

答案 0 :(得分:0)

如果源文件位于shift-jis中,则应使用可以支持它的解析器,或者在解析文件之前将其转换为UTF-8。

我相信此字符集还使用ASCII作为其基本类型,但对于某些字符,它使用2个字节作为字符,因此,如果0x5B可能不会显示为字符的“第一个字节”。 (注意:这是根据我认为 shift-jis的工作原理得出的推测。)

是的,您需要修改解析器以了解shift-jis,或者需要在解析之前将文件转换为UTF-8。我认为转换是最简单的。