0

在蟒蛇中:

>>> "\xc4\xe3".decode("gbk").encode("utf-8")
'\xe4\xbd\xa0'
>>> "\xc4\xe3".decode("gbk")
u'\u4f60'

我们可以得出两个结论:

1.\xc4\xe3 in gbk encode = \xe4\xbd\xa0 in utf-8
2.\xc4\xe3 in gbk encode = \x4f\x60 in unicode(或者说在ucs-2中)

在 R 中:

> iconv("\xc4\xe3",from="gbk",to="utf-8",toRaw=TRUE)
[[1]]
[1] e4 bd a0
> iconv("\xc4\xe3",from="gbk",to="unicode",toRaw=TRUE)
[[1]]
[1] ff fe 60 4f

现在,consume1 是正确的,它在 python 和 R 中一样
是一个谜,
gbk encode = 中的 \xc4\xe3 到底是什么?在 Unicode 中。
在 python 中是 u'\u4f60',在 R 中是 ff fe 60 4f
是否相等?哪一个是正确的?它们都正确吗?

4

1 回答 1

6

在 python 中,\uxxxx符号指的是 Unicode 代码点,而不是这些代码点的任何编码

UCS-2、UTF-16、UTF-8 都是能够以字节为单位捕获这些代码点的编码,适合存储在文件中、通过网络传输等。

代码点的 R 表示\u4f60包括 UTF-16字节顺序标记或 BOM。它指示选择的字节顺序,其中 0xFFFE 表示小端。当您编码为 UTF-16 时,Python 也包含它:

>>> u'\uf460'.encode('utf16')
'\xff\xfe`\xf4'

大端等效是 0xFEFF。您可以显式编码到utf-16beutf-16le在 python 中以避免包含 BOM,因为您已经做出了明确的选择:

>>> u'\uf460'.encode('utf-16be')
'\xf4`'
>>> u'\uf460'.encode('utf-16le')
'`\xf4'

您真的应该阅读 Joel Spolsky Unicode文章以及 Python Unicode HOWTO以更全面地了解 Unicode 和编码之间的区别。

于 2012-09-08T11:31:06.960 回答