使用 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。这是什么原因造成的?我该如何解决这个问题?
最佳答案
您使用的是 Python 2,我假设您在像 Linux 这样以 UTF-8 编码 I/O 的平台上运行。
Python 2 的 ""
文字代表字节串。因此,当您在 ISO 8859-1 编码的源文件中指定 "år"
时,变量 input
的值为 b'\xe5r'
.当您打印
这个时,原始字节被输出到控制台,但显示为问号,因为它们不是有效的 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 格式。
关于python - 特殊字符显示为问号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19882935/