阅读:6919回复:14
U+9FB4 - U+9FBB 这8个字在 GB18030 -> Unicode 转换时是不是错了
这8个字分别是:龴、龵、龶、龷、龸、龹、龺、龻。
当码表以 GB18030 编码保存时,打这几个字会变成:(U+E81E)、(U+E826)、(U+E82B)、(U+E82C)、(U+E832)、(U+E843)、(U+E854)、 (U+E864)。虽然长得差不多,但后者是专用字符,并非标准,不应使用。(况且“宋体”中, U+9FB5 的字形和 U+E826 的字形并不一样。) 使用 UTF-8 编码则不存在此问题。是不是内置的 GB18030 -> Unicode 映射错了? 在用户码表不能采用 UTF-8 编码的情况下,要把 U+9FB4 - U+9FBB 这些字符放进用户码表是不是无解? |
|
板凳#
发布于:2017-03-29 15:15
你说的对。我的码表里的确是 FE59。但:
1. 只有 Windows 把 U+9FB4 编码为 82359037。其他系统中,U+9FB4 的 GB18030 编码都是 FE59。 2. 参考 http://www.fmddlmyy.cn/text24.html。按这篇文章的意思,Windows是对的。 |
|
地板#
发布于:2017-03-29 15:38
又试了一下,主要问题是 libiconv 会 U+9FB4 <-> FE59,影响了很多软件。
Windows 和(Linux 下的 Python)都是 U+9FB4 <-> 82359037,U+E81E <-> FE59。 我因为用了 vim,它可能用了 libiconv,保存时 U+9FB4 -> FE59,然后小小调用 Windows 的转换,FE59 -> U+E81E。 小小在 Linux 上调用什么做编码转换?同样的码表文件在 Linux 上就是 FE59 -> U+9FB4。 我觉得最好能有个全局选项把默认编码设成 UTF-8 吧,现在操作系统的接口都是 Unicode 的,用 GB18030 + 转换 的办法理论上没什么问题但总是觉得不方便。 |
|
4楼#
发布于:2017-03-29 21:56
dgod:没有对应编码但同一个汉字在私有区中有回到原帖我的 vim 设的是 GB18030,不是 GBK。但是看起来 vim 不是用的 Windows 提供的编码转换,而是和 libiconv 一样的。 我总结一下几个软件的编码转换行为吧:
至于E81E等Unicode被吞了,那也没办法了,因为GB18030本来就占用了这些码位。 |
|||||||||||||||||||||||||