Encoding 如果是中文,代码页是如何工作的

Encoding 如果是中文,代码页是如何工作的,encoding,character-encoding,codepages,Encoding,Character Encoding,Codepages,在中文/日语的情况下如何工作 它无法在一个字节的范围内对这些语言的所有字母表字符进行编码,那么它是如何工作的呢 请注意,我讲的是Unicode之前的时间。我最熟悉日语,但一般来说,对于任何需要更多字符的语言,其策略都是相同的,而不是一个字节中所包含的字符-您使用的是可变宽度多字节编码,其中一些字节被识别为开始“宽”字符和ASCII被单独保留 在早期,所谓的“ASCII安全”编码很有用。它们只使用七位(高位始终为0),因此它们与各种系统(包括硬件)一起工作,这些系统只希望控制字符在任何字节中设置高

在中文/日语的情况下如何工作

它无法在一个字节的范围内对这些语言的所有字母表字符进行编码,那么它是如何工作的呢


请注意,我讲的是Unicode之前的时间。

我最熟悉日语,但一般来说,对于任何需要更多字符的语言,其策略都是相同的,而不是一个字节中所包含的字符-您使用的是可变宽度多字节编码,其中一些字节被识别为开始“宽”字符和ASCII被单独保留

在早期,所谓的“ASCII安全”编码很有用。它们只使用七位(高位始终为0),因此它们与各种系统(包括硬件)一起工作,这些系统只希望控制字符在任何字节中设置高位。ISO-2022-JP就是其中之一,并且仍然经常在电子邮件中使用(主要是在功能手机上)

以下是ISO-2022-JP在不解码的情况下的外观:

echo "日本語" | iconv -f utf8 -t iso2022jp | cat -v
^[$BF|K\8l^[(B
请注意,“test”未更改,所有其他字符都是有效的ASCII字符
^[
是ASCII转义字符。(ISO-2022也有8位版本,但7位是最常用的版本。)

后来的可变宽度编码,如EUC、Shift JIS和UTF-8,除了使用二进制(非ASCII)转义外,所有工作原理相同,因此任何多字节字符的第一个字符都具有高位集(即,无符号字节值>128)。有一个很好的表格解释UTF如何处理这个问题。就像旧的ASCII安全编码一样,这些编码保持ASCII字符串不变

也有固定宽度的多字节编码,但它们相对不常见。曾有人试图推广一种编码,这种编码每样东西只使用两个字节,称为“UCS-2”,但最终没有足够的空间容纳足够的字符,并在20世纪90年代被可变宽度的UTF-16取代。UTF-16是(实际上)Java和Javascript中使用的内部编码,但由于UCS-2的历史,有时字符串长度之类的东西会以奇怪的方式工作


存在技术上固定的宽度,但它没有被广泛使用,我个人也从未在野外遇到过。

简短回答:两个字节!!对于unicode,一个字符实际上可以有很多字节。特别是如果它有很多修饰符的话。u For intance通常是2,但可以是3,这取决于规范化。@Evert我说的是unicode之前的timesIn在这种情况下,您可能会对Unicode之前的多字节编码感兴趣。例如,还有其他的。因此,在UTF-n编码之前,有几种可变宽度的多字节编码专门为中国/日本/韩国设计,它们处理字符的方式或多或少与UTF-8编码相同(前导位表示它是否是非ASCII符号的一部分)。我说的对吗?旧的多字节编码通常有7位安全选项,因此它们不使用前导位;7位ISO-2022使用ASCII转义字符(十进制值033)例如。但基本上是相同的想法。哦,ASCII转义是八进制033,而不是十进制。错误的列:P