多字节字符集中的换行符控制字符

Thi*_*ilo 4 unicode newline character-encoding cjk

我有一些Perl代码将新行和换行符转换为标准化形式.输入文本是日语,因此将有多字节字符.

是否仍然可以逐字节地进行这种转换(我认为它目前正在进行),还是我必须检测字符集并启用Unicode支持?换句话说,流行的编码(Shift-JIS,EUC-JP,UTF-8,ISO-2022-JP)是否使用字节作为其字符集的一部分,可能会被误认为是ASCII控制字符?

我只需要CR和LF就能工作.

更新:添加了ISO-2022-JP.这是一个看起来最麻烦的那个时髦的逃脱序列......

Ala*_*ore 5

对于前128个代码点,所有这些字符集都与ASCII相同 - 也就是说,它们仅使用一个字节来编码ASCII字符,包括CR(0x0D)和LF(0x0A).你应该没有任何问题.


小智 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
Run Code Online (Sandbox Code Playgroud)

并且在各种字符集之间来回切换的转义序列字符是:

0x1B, 0x28, 0x24, 0x40, 0x42, and 0x4A
Run Code Online (Sandbox Code Playgroud)

如您所见,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
Run Code Online (Sandbox Code Playgroud)

同样,CR和LF没有重叠.