我在这个网站上看到了Unicode表。
当我打印字母"ספר"时:
>>> x = 'ספר'
>>> x
'xd7xa1xd7xa4xd7xa8'
我得到这个字符'xd7xa1xd7xa4xd7xa8'
.
我认为python用utf-8 Unicode编码单词"ספר",因为它是默认的,对吧?
但是当我运行此代码时:
>>> x = u'ספר'
>>> x
u'u05e1u05e4u05e8'
我得到这个u'u05e1u05e4u05e8'
,这是一个Unicode点,对吧?
如何从 utf8 字面转换为 Unicode 点?
>@In第一个示例,您创建了一个字节字符串(类型 str
)。您的终端确定了编码(在本例中为 UTF-8)。
在第二个示例中,您创建了一个 Unicode 字符串(类型 unicode
)。Python 自动检测终端使用的编码(从 sys.stdin.encoding
开始),并将字节从 UTF-8 解码为 Unicode 码位。
您可以通过解码进行从字节字符串到 Unicode 字符串的相同转换:
unicode_x = bytestring_x.decode('utf8')
要朝另一个方向走,您需要编码:
bytestring_x = unicode_x.encode('utf8')
您使用字符的实际 UTF-8 字节指定了文字; 这在终端中工作正常,但在 Python 源代码中则不然;Python 2 源代码仅以 ASCII 文本的形式加载。您可以通过设置源代码编码声明来更改此设置。这在 PEP 263 中指定;它必须是源文件中的第一行或第二行。例如:
# encoding: UTF-8
或者,您可以坚持使用uhhhh
和xhh
转义序列来表示非 ASCII 字符。
你可能想了解Unicode和编码(二进制)字节字符串之间的区别,以及它与Python的关系:
每个软件开发人员绝对、绝对必须了解 Unicode 和字符集(没有任何借口!)的绝对最低要求 作者:Joel Spolsky
The Python Unicode HOWTO
Pragmatic Unicode by Ned Batchelder