我正在使用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
结果,我无法摆脱这个错误。我该如何解决? 感谢。
答案 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,857,1026 ......):
öçışğüÖÇİŞĞÜ