什么是unicode字符串?

时间:2014-02-16 07:51:02

标签: python unicode utf-8

unicode字符串究竟是什么?

常规字符串和unicode字符串之间的区别是什么?

什么是utf-8?

我现在正在尝试学习Python,我一直听到这个流行语。下面的代码是做什么的?

i18n字符串(Unicode)

> ustring = u'A unicode \u018e string \xf1'
> ustring
u'A unicode \u018e string \xf1'

## (ustring from above contains a unicode string)
> s = ustring.encode('utf-8')
> s
'A unicode \xc6\x8e string \xc3\xb1'  ## bytes of utf-8 encoding
> t = unicode(s, 'utf-8')             ## Convert bytes back to a unicode string
> t == ustring                      ## It's the same as the original, yay!
True

文件Unicode

import codecs

f = codecs.open('foo.txt', 'rU', 'utf-8')
for line in f:
# here line is a *unicode* string

2 个答案:

答案 0 :(得分:43)

这个答案是关于Python 2.在Python 3中,str是一个Unicode字符串。

Python的str类型是8位字符的集合。可以使用这些8位字符表示英文字母,但是±,♠,Ω和symbols等符号不能。

Unicode 是处理各种字符的标准。每个符号都有一个代码点(一个数字),这些代码点可以使用各种编码进行编码(转换为字节序列)。

UTF-8 就是这样一种编码。低码点使用单个字节编码,较高码点编码为字节序列。

Python的unicode类型是代码点的集合。第ustring = u'A unicode \u018e string \xf1'行创建一个包含20个字符的Unicode字符串。

当Python解释器显示ustring的值时,它会转义两个字符(Ǝ和ñ),因为它们不在标准的可打印范围内。

s = unistring.encode('utf-8')使用UTF-8对Unicode字符串进行编码。这会将每个代码点转换为适当的字节或字节序列。结果是一个字节集合,以str形式返回。 s的大小为22个字节,因为其中两个字符具有高代码点,并且被编码为两个字节的序列而不是一个字节。

当Python解释器显示s的值时,它会转义不在可打印范围内的四个字节(\xc6\x8e\xc3和{{ 1}})。两对字节不像以前那样被视为单个字符,因为\xb1的类型为s,而不是str

unicode行与t = unicode(s, 'utf-8')相反。它通过查看encode()的字节并解析字节序列来重建原始代码点。结果是一个Unicode字符串。

s的调用指定codecs.open()作为编码,它告诉Python将文件内容(字节集合)解释为使用UTF-8编码的Unicode字符串。

答案 1 :(得分:-6)

Python支持字符串类型和unicode类型。字符串是一系列字符,而unicode是一系列“指针”。 unicode是序列的内存中表示,其上的每个符号都不是char,而是用于在地图中选择char的数字(十六进制格式)。 因此unicode var没有编码,因为它不包含字符。