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
这个答案是关于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字符串进行编码。这会将每个码位转换为适当的字节或字节序列。结果是一个字节集合,返回为str
。s
的大小是22个字节,因为其中两个字符有很高的码位,并且被编码为两个字节的序列,而不是一个字节。当Python解释器显示值
s
时,它将转义不在可打印范围内的四个字节(\xc6
、\x8e
、\xc3
和\xb1
)。这两对字节不像以前那样被视为单个字符,因为s
是str
类型,而不是unicode
。行
t = unicode(s, 'utf-8')
与encode()
相反。它通过查看s
的字节并解析字节序列来重建原始代码点。结果是一个Unicode字符串。对
codecs.open()
的调用指定utf-8
作为编码,它告诉Python将文件(字节集合)的内容解释为使用UTF-8编码的Unicode字符串。Python支持字符串类型和unicode类型。字符串是一个字符序列,而unicode是一个“指针”序列。unicode是序列的内存表示,序列上的每个符号都不是一个字符,而是一个用于在映射中选择字符的数字(十六进制格式)。因此unicode变量没有编码,因为它不包含字符。
相关问题 更多 >
编程相关推荐