在处理ISO-8859-1 / Latin-1字符集时,我在Python中遇到了巨大的编码问题。
当使用os.listdir
来获取文件夹的内容时,我得到的是ISO-8859-1编码的字符串(例如:''Ol \ xe1 Mundo''),但是在Python解释器中也是如此string被编码为不同的字符集:
In : 'Olá Mundo'.decode('latin-1')
Out: u'Ol\xa0 Mundo'
如何强制Python将字符串解码为相同的格式?我已经看到os.listdir
正在返回正确编码的字符串但是解释器不是('á'字符对应于ISO-8859-1中的'\ xe1',而不是'\ xa0'):
http://en.wikipedia.org/wiki/ISO/IEC_8859-1
有关如何克服的任何想法?
答案 0 :(得分:3)
在python2交互式会话中输入非unicode字符串文字时,将假定系统默认编码。
您似乎正在使用Windows,因此默认编码可能是“cp850”或“cp437”:
C:\>python
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdin.encoding
'cp850'
>>> 'Olá Mundo'
'Ol\xa0 Mundo'
>>> u'Olá Mundo'.encode('cp850')
'Ol\xa0 Mundo'
如果您将代码页更改为1252(大致相当于latin1),则字符串将按预期显示:
C:\>chcp 1252
Active code page: 1252
C:\>python
Python 2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdin.encoding
'cp1252'
>>> 'Olá Mundo'
'Ol\xe1 Mundo'