什么是unicode字符串?

2024-09-28 19:00:11 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: the字符串代码stringbyteslineunicodeutf
2条回答

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

Python的str类型是8位字符的集合。英文字母表可以用这8位字符表示,但符号如‘,♠,Ω和ℑ不能。

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

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

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

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

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

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

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

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

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

相关问题 更多 >