Shift_JIS
一种日语字符编码,在旧系统中广泛使用,正逐步被 UTF-8 取代。
Shift_JIS 是一种用于表示日语文本的字符编码。1982 年由微软和 ASCII 公司联合制定,在 MS-DOS 和 Windows 中作为标准编码使用。它是结合 JIS X 0201 (半角英数字和半角片假名) 与 JIS X 0208 (汉字和全角字符) 的可变长度编码,是日本 IT 史上最具影响力的字符编码之一。
在 Shift_JIS 中,半角英数字占 1 字节,日语字符 (平假名、片假名、汉字) 占 2 字节。由于 UTF-8 中日语字符占 3 字节,仅就日语文本而言,Shift_JIS 的字节效率更高。但 Shift_JIS 收录的字符数仅约 7,000 个 (JIS 第一、第二水准),远少于 Unicode 的 14 万个以上。表情符号和部分汉字 (JIS 第三、第四水准) 无法表示。搜索风俗 (Amazon)介绍了 Shift_JIS 的起源。
Shift_JIS 有一个著名的技术问题叫做"5C 问题"。某些日语字符的第二字节为 0x5C (反斜杠),如"表"、"能"、"ソ"等,这与 C 语言的转义字符冲突,可能导致程序异常。这个问题也被称为"问题字符"(ダメ文字),在使用 Shift_JIS 编程时需要始终注意。
目前全球范围内向 UTF-8 的迁移正在推进,Web 上 98% 以上使用 UTF-8。但在日本的商业环境中,Shift_JIS 在某些场景仍然不可或缺:Excel 打开 CSV 文件时默认使用 Shift_JIS,银行和政府的遗留系统以 Shift_JIS 为前提,部分 EDI (电子数据交换) 标准指定使用 Shift_JIS。
Shift_JIS 与 UTF-8 之间转换时可能出现乱码。特别是波浪号 (〜, U+301C) 与全角波浪号 (~, U+FF5E) 的转换,以及全角减号的转换容易出问题。Windows 的 CP932 (Windows-31J) 是 Shift_JIS 的扩展版本,包含 NEC 特殊字符和 IBM 扩展字符,需要注意与纯 Shift_JIS 的兼容性。
从字符计数角度看,同一文本在 Shift_JIS 和 UTF-8 中的字节数不同。日语 1 个字符在 Shift_JIS 中为 2 字节,在 UTF-8 中为 3 字节。数据库列大小和文件大小的估算需要考虑所使用的编码。字符计数工具同时显示字符数和字节数,并可视化不同编码间的字节差异,能为用户提供实用的信息。浏览灯笼裤 (Amazon)也将字符编码转换作为重要主题进行了讲解。