noob查询Python中的unicode和str方法

时间:2011-12-08 19:29:16

标签: python unicode

我想在Python中寻求对Unicode和str方法的一些澄清。在阅读了一些关于Unicode的explanation之后,仍然有一些疑点,我希望大家可以帮助我:

  1. 我正确地说,当声明一个unicode字符串,例如word=u'foo'时,python使用终端的编码并在例如foo中解码UTF-8,并分配{{ 1}} unicode中的十六进制表示?

  2. 因此,一般来说,是在文件中打印出字符的过程,在显示映射的字符之前,总是根据编码解码字节流吗?

  3. 在我的终端中,为什么word'é'.lower()显示在十六进制str('é')中,而'a'.lower()则不显示?

4 个答案:

答案 0 :(得分:2)

首先我们应该清楚我们只讨论Python 2。 Python 3与众不同。

  1. 你是对的。但是如果你在py文件中写“abcd”,源文件编码的声明将决定解释器如何解码你的字符串。
  2. 您需要先解码它,然后对其进行编码并打印。在Python 2中,不要直接打印出unicode!否则,如果系统以不兼容的方式对其进行编码(如“ascii”),则会引发异常。 你必须明确地做所有这些。

  3. 简短的回答是“a”不必在“\ x61”中表示,“a”只是更具可读性。更长的答案:通常在交互式shell中,如果键入值并按Enter键,Python将显示字符串的repr()。我认为“repr”会尝试以ascii表示形式打印所有内容。对于“a”,它已经是ascii,所以它直接输出了。对于str“é”,它是UTF-8编码的二进制流,因此Python转义每个字节并打印为'xc3 \ xa9'

答案 1 :(得分:0)

我认为Python不会在控制台I / O上进行任何自动编码或解码。请考虑以下事项:

>>> 'é'
'\xc3\xa9'
>>> 'é'.decode('UTF-8')
u'\xe9'

您会注意到\xe9'LATIN SMALL LETTER E WITH ACUTE'的Unicode代码点,而\xc3\xa9是与UTF-8中相同字符对应的字节序列。

Python 3中的所有内容都发生了变化,因为所有字符串都是Unicode。我不确定那里的规则。

答案 2 :(得分:0)

  1. 有关如何指定Python源文件的编码,请参阅http://www.python.org/dev/peps/pep-0263/。对于Python解释器,有PYTHONIOENCODING环境变量。

  2. 你使用什么操作系统?

答案 3 :(得分:0)

  1. 语句word = u'foo'分配一个unicode字符串 object ,而不是“十六进制表示”。 Unicode对象表示文本字符序列。此外,在此上下文中考虑解码是错误的。 Unicode 是一种编码,它也没有“编码”。
  2. 是。解码:编码输出。
  3. 对于非unicode 字符串文字的repr,Python将使用sys.stdin.encoding;对于 unicode 字符串文字的repr,Python将使用“unicode_escape”。