Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以问号形式出现的特殊字符_Python_Input_Encoding_Character_Output - Fatal编程技术网

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: ")

使用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”
,它将为“å”输出一个问号(?)


值得一提的是,我使用了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字符串(
    u'text'
    )而不是字节字符串。您需要小心解码输入,因为在Python2上,
    raw\u input()
    返回字节字符串而不是文本字符串。如果您知道输入是UTF-8,请使用
    raw\u input()。解码('UTF-8')

  • 用UTF-8而不是iso-8859-1编码源文件。那么字节字符串文字将已经在UTF-8中


您是否尝试过打印u“år”?这是否意味着用户输入总是以Unicode编码?非常感谢!通过添加.decode('utf-8')部分,问题得以解决。非常感谢!:)
print a.encode('utf-8')