Cor*_*tex 6 python string encoding python-2.x python-internals
在python 2.x中编码字符串的默认编码是什么?我读过有两种方法可以声明一个字符串.
string = 'this is a string'
unicode_string = u'this is a unicode string'
Run Code Online (Sandbox Code Playgroud)
第二个字符串是Unicode.第一个字符串的编码是什么?
iva*_*eev 10
根据Python默认/隐式字符串编码和转换(简明地叙述其Py2部分,以最小化重复):
Python 2中实际上有多个独立的"默认"字符串编码,由其功能的不同部分使用.
解析代码和字符串文字:
str
从文字中 - 将包含文件中的原始字节,不进行转码unicode
从文字 - 文件中的字节是decode
'd与文件的"源编码"默认ascii
unicode_literals
未来,文件中的所有文字都被视为Unicode的文字转码/类型转换:
str<->unicode
类型转换和encode
/ decode
w/o参数完成sys.getdefaultencoding()
ascii
几乎总是如此,所以任何国家角色都会导致UnicodeError
str
只能是decode
'd和unicode
- encode
'd.另外尝试将涉及隐式类型转换(具有上述结果)I/O,包括print
:
unicode
- encode
'd with <file>.encoding
if set,否则隐式转换为str
(带有上述结果)str
- 将原始字节写入流,不进行转码.对于国家字符,终端将根据其语言环境设置显示不同的字形.字面上的答案是它们不一定代表任何特定的编码.在Python 2中,字符串只是一个字节数组,bytes
与Python 3中的类型完全相同.对于一个字符串,s
您可以调用s.decode()
以获取Unicode字符串,但您必须*手动传递编码,正是出于这个原因.您可以使用a string
来保存ASCII字节,或来自Windows代码页850(这是ASCII的超集),或UTF8字节,甚至UTF16字节的字符.最后一种情况很有意思,因为即使该字符串中的字符在ASCII范围内,字节也与ASCII编码的版本不匹配(它们将与空字符交替).该string
类型甚至适用于某些二进制格式的字节,这些字节不对应于任何编码字符串,例如图像文件的字节.
更实际的答案是通常使用ASCII.例如,文字字符串"xyz"
将给出一个三字节字符串,其字节对应于这些字符的ASCII编码.
这种歧义是Python 3中字符串的行为和约定发生变化的原因.
*正如CristiFati的回答所述,可以省略encoding=
参数decode
,在这种情况下将采用ASCII.我的错.