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

标签 unicode character-encoding newline cjk

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

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

我只需要 CR 和 LF 即可工作。

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

最佳答案

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

关于unicode - 多字节字符集中的换行控制字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/724247/

相关文章:

c++ - Main 只接收参数的首字母

java - 在java中检测汉字

ios - iOS如何解码ISO6937编码的文本?

linux - 如何执行 while 循环并将字符串重定向到其中

python - BeautifulSoup webscraper 中的 UnicodeEncodeError

javascript - JavaScript 是否支持正则表达式中高于 0xFFFF 的 Unicode 范围?

html - 如果页面已经是 UTF-8 格式,将 accept-charset ="UTF-8"添加到 HTML 表单有什么好处吗?

python - 用于 HTML 的非 unicode 和非 ascii 的 python 综合字符替换模块

python - Beautifulsoup 通过 <br/> 拆分标签中的文本

c - 使用多个变量时,如何通过 printf 函数删除 C 中多余的换行符?