JIS (日本产业规格)

日本关于产业产品的国家标准。在字符编码领域,JIS X 0208 (基本日文字符集) 和 JIS X 0213 (扩展字符集) 构成了日文文本处理的基础。

JIS (Japanese Industrial Standards,日本产业规格) 是依据日本产业标准化法制定的国家标准。2019 年法律修订后,名称从"日本工业规格"改为"日本产业规格",但缩写 JIS 沿用至今。在字符编码领域,JIS 制定的字符集和编码方案奠定了日文计算机处理的基础。

与日文字符编码相关的主要 JIS 标准有以下三个。JIS X 0201 (1969 年制定,旧称 JIS C 6220) 定义了拉丁字母和片假名,是最早的字符编码标准。其拉丁字母部分与 ASCII 几乎相同,但 0x5C 分配的不是反斜线而是日元符号 (¥),0x7E 分配的不是波浪号而是上划线,这正是"反斜线与日元符号看起来互换了"这类混乱的起点。JIS X 0208 于 1978 年作为 JIS C 6226 制定 (最初收录 6,802 个字符),1987 年改为现在的标准编号,1990 年修订以后收录 6,879 个字符。JIS X 0213 (2000 年制定,2004 年修订) 在 JIS X 0208 基础上扩展,加入第三水准 1,259 字 (2000 年制定时为 1,249 字,2004 年修订追加 10 字)、第四水准 2,436 字等,现行版本收录 11,233 个字符。此外还有 JIS X 0212 (补助汉字,1990 年),但由于 Shift_JIS 无法表现,并未得到广泛使用。

JIS X 0208 的汉字分为"第一水准" (16 区至 47 区,2,965 字) 和"第二水准" (48 区至 84 区,3,390 字)。第一水准收录使用频率较高的汉字,按读音的五十音顺序排列。第二水准按部首笔画顺序排列,包含人名用汉字和专业术语中使用的汉字。由于区点位置在各水准内是连续的,编码之后分界也很清楚。在 EUC-JP 中,第一水准的首字"亜"是 0xB0 0xA1,第二水准的首字"弌"是 0xD0 0xA1;在 Shift_JIS 中则分别是 0x88 0x9F 和 0x98 0x9F。在阅读乱码后的字节序列时,有这个参照就容易做出推断。

要在计算机上实际使用 JIS 标准的字符集,需要编码方案。围绕同一个 JIS X 0208 字符集,产生了三种编码方案:ISO-2022-JP (7 位编码,用于电子邮件)、Shift_JIS (1982 年前后作为面向个人计算机的方案被构想出来,在 Windows 日文版中被标准采用)、EUC-JP (在 UNIX 系统中普及)。这种"一个字符集对应多种编码方案"的结构,正是日文容易出现乱码的根本原因。而且 Shift_JIS 还存在各实现自行扩展的情况,Windows 的 CP932 就拥有独自追加的字符。波浪线 (WAVE DASH,U+301C) 与全角波浪线 (FULLWIDTH TILDE,U+FF5E) 都对应 CP932 中相同的 2 个字节 (0x81 0x60),因此往返转换会偏向其中一方。只说"用 Shift_JIS 保存的"信息量不足,还需要确认是哪个实现。

如今,新项目几乎不会选择 JIS 系编码。Unicode (UTF-8) 已成为事实标准,JIS X 0208 的所有字符都已被 Unicode 收录。然而,在行政系统、金融机构的核心系统、EDI (电子数据交换) 等遗留系统中,Shift_JIS 和 ISO-2022-JP 仍在使用,字符编码转换的知识在实务中依然不可或缺。

在与字符计数的关联上,JIS X 0208 的汉字在 Shift_JIS 和 EUC-JP 中是 2 个字节,在 UTF-8 中是 3 个字节。不过非汉字并不一致,希腊字母、西里尔字母以及 ± 和 × 这类符号在 UTF-8 中也是 2 个字节。补助汉字 (JIS X 0212) 在 EUC-JP 中使用 3 个字节,而 Shift_JIS 装不下。同样是"一个字符",字节数会因编码而不同,因此在基于字节数的字符数限制 (如数据库的 VARCHAR) 中,需要确认其前提是哪种编码。

分享这篇文章