Python编码/解码错误

时间:2015-06-11 15:04:03

标签: python unicode

我正在使用Python 2.7.3。我的操作系统是Windows7(32位)。 在cmd中,我输入了以下代码:

chcp 1254

我将解码系统转换为1254。 但是,

#!/usr/bin/env python
# -*- coding:cp1254 -*-
print "öçışğüÖÇİŞĞÜ"

当我运行上面的代码时,我得到了输出:

÷²■­³Íæ̺▄

但是当我把你放在打印命令之后(打印u“öçışğüÖÇİŞĞÜ”)

当我编辑代码时:

#!/usr/bin/env python
# -*- coding:cp1254 -*-

import os
a = r"C:\\"
b = "ö"
print os.path.join(a, b) 

我得到了那个输出:

÷

这就是我尝试时的原因

print unicode(os.path.join(a, b)) 

命令。我收到了这个错误:

print unicode(os.path.join(a, b))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xf6 in position 13: ordinal
 not in range(128)

尝试不同的方式:

print os.path.join(a, b).decode("utf-8").encode(sys.stdout.encoding) 

当我尝试上面的代码时,我收到了这个错误:

print os.path.join(a, b).decode("utf-8").encode(sys.stdout.encoding)
  File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xf6 in position 13: invalid start byte

结果,我无法摆脱这个错误。我该如何解决? 感谢。

1 个答案:

答案 0 :(得分:1)

当我运行原始代码但使用chcp 857(土耳其OEM代码页)时,我可以重现您的问题,因此我认为您没有运行chcp 1254

÷²■­³Íæ̺▄

如果您将源编码声明为:

# -*- coding:cp1254 -*-

您必须以该编码保存源代码。如果您不使用Unicode字符串,则还必须在控制台上使用相同的编码。然后它正常工作。

示例(声明来源cp1254,但未正确保存为cp1252和控制台chcp 1254):

öçisgüÖÇISGÜ

示例(声明并正确保存为cp1254的源,控制台chcp 1254):

öçışğüÖÇİŞĞÜ

请务必注意,使用Unicode字符串时,您不必将源编码与控制台的编码相匹配。

示例(声明并保存为UTF-8,带有Unicode字符串):

#!python2
# -*- coding:utf8 -*-
print u"öçışğüÖÇİŞĞÜ"

输出(使用任何支持土耳其语的代码页... 1254,85​​7,1026 ......):

öçışğüÖÇİŞĞÜ