为何用UTF-16编码打开UTF-8文件在gedit中出现可读中文?
为什么用UTF-16打开UTF-8文本会出现中文和乱码?
嘿,这个现象背后其实是编码解析规则不匹配导致的,我给你一步步拆解清楚:
- 原始文件的编码基础:你用gedit保存的文本默认是UTF-8编码。UTF-8是变长编码,像英文、数字这类ASCII字符每个只占1个字节;而中文这类非ASCII字符在UTF-8里占3个字节。
- UTF-16的解析规则:UTF-16是固定以2个字节为一个单元来解析字符(除了极少数需要4字节的代理对字符)。当你强制选择UTF-16打开文件时,gedit会把原本的UTF-8字节流,从头到尾每2个字节拼成一组,当作一个Unicode字符来解码。
- 可读中文的来源:举个具体例子,比如你输入的"L"(字节是
0x4C)和"o"(字节是0x6F),按UTF-16解析时会被组合成0x6F4C,这个Unicode码对应的字符就是中文的“沐”——这就是你看到的可读中文的由来!原本连续的ASCII单字节被两两拼接,刚好凑出了存在的中文字符。 - 乱码的原因:而那些无法显示的随机字符,要么是拼接后的字节组合对应了Unicode里的不可显示控制字符,要么是形成了无效的UTF-16编码(比如单独的代理区字符),系统没法识别,就显示成了乱码方块或者奇怪符号。
简单来说,就是用错了解码规则,把原本的字节序列强行按另一种编码的方式重新组合,结果拼出了完全不符合原意的字符,其中刚好有部分组合命中了可显示的中文字符。
内容的提问来源于stack exchange,提问作者Henry Sanger
相关产品推荐
相关产品推荐

