使用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拉丁1。这是什么原因?我怎样才能解决这个问题?
我假设您使用的是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:
使用Unicode字符串(
u'text'
)而不是字节字符串。您需要小心解码输入,因为在Python 2上,raw_input()
返回的是字节字符串,而不是文本字符串。如果您知道输入是UTF-8,请使用raw_input().decode('utf-8')
。用UTF-8而不是iso-8859-1编码源文件。那么字节字符串文字将已经在UTF-8中。
相关问题 更多 >
编程相关推荐