Python 以问号形式出现的特殊字符
使用Python编程语言,我在输出诸如å、ä和ö等字符时遇到问题。下面的代码给了我一个问号(?)作为输出,而不是一个å:Python 以问号形式出现的特殊字符,python,input,encoding,character,output,Python,Input,Encoding,Character,Output,使用Python编程语言,我在输出诸如å、ä和ö等字符时遇到问题。下面的代码给了我一个问号(?)作为输出,而不是一个å: #coding: iso-8859-1 input = "å" print input 下面的代码允许您输入随机文本。for循环遍历输入的每个字符,将它们添加到字符串变量a,然后输出结果字符串。该代码工作正常;您可以输入å、ä和ö,输出仍然正确。例如,“år”按预期输出“år” #coding: iso-8859-1 input = raw_input("Test: ")
#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”
,它将为“å”输出一个问号(?)
值得一提的是,我使用了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\u input()
时,用户的输入已经是UTF-8编码的,因此正确输出
要解决此问题,请执行以下操作之一:
- 在打印字符串之前,将其编码为UTF-8:
print a.encode('utf-8')
- 使用Unicode字符串(
)而不是字节字符串。您需要小心解码输入,因为在Python2上,u'text'
返回字节字符串而不是文本字符串。如果您知道输入是UTF-8,请使用raw\u input()
raw\u input()。解码('UTF-8')
- 用UTF-8而不是iso-8859-1编码源文件。那么字节字符串文字将已经在UTF-8中
print a.encode('utf-8')