UTF8 输入文字和 unicode 点有什么区别



我在这个网站上看到了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

或者,您可以坚持使用uhhhhxhh转义序列来表示非 ASCII 字符。

你可能想了解Unicode和编码(二进制)字节字符串之间的区别,以及它与Python的关系:

  • 每个软件开发人员绝对、绝对必须了解 Unicode 和字符集(没有任何借口!)的绝对最低要求 作者:Joel Spolsky

  • The Python Unicode HOWTO

  • Pragmatic Unicode by Ned Batchelder

最新更新