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

Unicode 多字节字符集中的换行控制字符,unicode,character-encoding,newline,cjk,Unicode,Character Encoding,Newline,Cjk,我有一些Perl代码,可以将新行和换行转换为规范化形式。 输入文本为日语,因此将有多字节字符 是否仍然可以逐字节执行此转换(我认为目前是这样),还是必须检测字符集并启用Unicode支持?换句话说,流行的编码(Shift JIS、EUC-JP、UTF-8、ISO-2022-JP)是否将字节用作其字符集的一部分,从而可能被误认为是ASCII控制字符 我只需要CR和LF就可以工作了 更新:添加了ISO-2022-JP。这是一个看起来最麻烦的,因为它的时髦转义序列…所有这些字符集在前128个代码点上都

我有一些Perl代码,可以将新行和换行转换为规范化形式。 输入文本为日语,因此将有多字节字符

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

我只需要CR和LF就可以工作了


更新:添加了ISO-2022-JP。这是一个看起来最麻烦的,因为它的时髦转义序列…

所有这些字符集在前128个代码点上都与ASCII相同——也就是说,它们只使用一个字节来编码ASCII字符,包括CR(0x0D)和LF(0x0A)。您不应该有任何问题。

ISO-2022-JP使用Shift In/Shift Out为94个可打印ASCII字符指定不同的含义,使包括CR和LF在内的控制字符保持不变。

您提到的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没有重叠。

以下是关于UTF-8编码的(规范性)详细信息:«[…]值0x00..0x7F不会出现在表示任何其他Unicode码点[…]的任何字节中.»-从«Unicode®标准-版本11.0-核心规范»-2018年6月-

我担心,即使ASCII保持不变,多字节字符的第二个字节也可能看起来像ASCII。或者额外的字节都来自“上半部分”?至少对于UTF-8,情况似乎是这样的:每一个“秒”字节看起来像“10xx xxxx”。在移位JIS中,第二个字节不一定要设置高阶位,但看起来它可以具有的最小值是0x40。在EUC-JP中,第二个和第三个字节总是0x80或更高。谁否决了我?如果是因为ISO-2022-JP,那在我回答时不是问题的一部分,但是(正如其他两位回答者所指出的)它与其他编码相比并不是一个问题。没关系,每个人群中都有一个匿名的投票人:-(事实上,我所知道的任何编码,在EBCDIC之外,CR或LF都没有问题(IBM大型机计算机)世界——你不想去那里:-)ISO-2022-JP在JIS字符集和ASCII之间愉快地切换,CR/LF绝对没有问题。
For ISO-2022-JP,
First-byte range: 0x21 - 0x7E
Second-byte range: 0x21 - 0x7E