使用Python编程语言,我无法输出å,ä和ö等字符。下面的代码给我一个问号(?)作为输出,而不是å:
#coding: iso-8859-1
input = "å"
print input
以下代码可让您输入随机文本。 for循环遍历输入的每个字符,将它们添加到字符串变量a,然后输出结果字符串。此代码正常工作;你可以输入å,ä和ö,输出仍然是正确的。例如,“år”按预期输出“år”。
#coding: iso-8859-1
input = raw_input("Test: ")
a = ""
for i in range(0, len(input)):
a = a + input[i]
print a
有趣的是,如果我将input = raw_input("Test: ")
更改为input = "år"
,则会为“å”输出问号(?)。
#coding: iso-8859-1
input = "år"
a = ""
for i in range(0, len(input)):
a = a + input[i]
print a
为了它的价值,我正在使用TextWrangler,我的文档的字符编码设置为ISO Latin 1.是什么原因造成的?我该如何解决这个问题呢?
答案 0 :(得分:3)
你正在使用Python 2,我假设在Linux这样的平台上运行,它以UTF-8编码I / O.
Python 2的""
文字代表字节字符串。因此,当您在ISO 8859-1编码的源文件中指定"år"
时,变量input
的值为b'\xe5r'
。当你print
时,原始字节输出到控制台,但显示为问号,因为它们不是有效的UTF-8。
要进行演示,请使用print repr(a)
代替print a
进行尝试。
当您使用raw_input()
时,用户的输入已经是UTF-8编码,因此输出正确。
要解决此问题,请:
在打印之前将字符串编码为UTF-8:
print a.encode('utf-8')
使用Unicode字符串(u'text'
)而不是字节字符串。您需要小心解码输入,因为在Python 2上,raw_input()
返回字节字符串而不是文本字符串。如果您知道输入为UTF-8,请使用raw_input().decode('utf-8')
。
使用UTF-8编码源文件,而不是iso-8859-1。然后字节串文字已经是UTF-8。