出现问号的特殊字符

2024-03-28 10:21:34 发布

您现在位置:Python中文网/ 问答频道 /正文

使用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。这是什么原因?我怎样才能解决这个问题?


Tags: 字符串代码intestforinputrawlen
1条回答
网友
1楼 · 发布于 2024-03-28 10:21:34

我假设您使用的是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中。

相关问题 更多 >