我有一些Perl代码可以将换行符和换行符转换为规范化表单。 输入文本是日语,因此将有多字节字符。
是否仍然可以逐个字节地进行此转换(我认为它目前正在进行),还是我必须检测字符集并启用Unicode支持?换句话说,流行的编码(Shift-JIS,EUC-JP,UTF-8,ISO-2022-JP)是否使用字节作为其字符集的一部分,可能会被误认为是ASCII控制字符?
我只需要CR和LF即可。
更新:添加了ISO-2022-JP。这是一个看起来最麻烦的那个时髦的逃脱序列......
答案 0 :(得分:5)
所有这些字符集与前128个代码点的ASCII相同 - 也就是说,它们只使用一个字节来编码ASCII字符,包括CR(0x0D)和LF(0x0A)。你应该没有任何问题。
答案 1 :(得分:5)
您提及的4种编码(Shift-JIS,UTF-8,EUC-JP,ISO-2022-JP)中没有一种使用日文字符内的CR或LF字符。对于UTF-8和EUC-JP,低ascii字符和日文字符内的字节之间没有任何重叠。但是,对于Shift-JIS和ISO-2022-JP,存在重叠,但不在找到CR和LF的范围内。
For ISO-2022-JP,
First-byte range: 0x21 - 0x7E
Second-byte range: 0x21 - 0x7E
在各种字符集之间来回切换的转义序列字符是:
0x1B, 0x28, 0x24, 0x40, 0x42, and 0x4A
如您所见,ISO-2022-JP中用于编码日文字符的字符均不与CR或LF重叠。
For Shift-JIS,
First-byte range: 0x81 - 0x9F, 0xE0 - 0xEF
Second-byte range: 0x40 - 0x7E, 0x80 - 0xFC
Half-width katakana: 0xA1 - 0xDF
同样,CR和LF没有重叠。
答案 2 :(得分:2)
ISO-2022-JP使用Shift-In / Shift-Out为94个可打印的ASCII字符分配不同的含义,使控制字符包括CR和LF保持不变。
答案 3 :(得分:0)
以下是UTF-8编码的(规范性)详细信息:«[…]值0x00..0x7F不会出现在任何字节中以表示任何其他Unicode代码点[…]。” Unicode®标准-版本11.0-核心规范»-2018年6月-https://www.unicode.org/versions/Unicode11.0.0/UnicodeStandard-11.0.pdf