在Python 3.6.5中打印Unicode字符

23 浏览
0 Comments

在Python 3.6.5中打印Unicode字符

我在Windows上使用Eclipse中的PyDev编写Python 3.6.5代码。运行这一行代码时出现错误:\n

print("•")

\n我得到的错误是:\n

SyntaxError: 文件C:\Users\short\workspace\Python Test 4\src\foo.py的第1行具有以'\x95'开头的非UTF-8代码,但没有声明编码;请参阅http://python.org/dev/peps/pep-0263/获取详细信息

\n我以为Python 3.6应该将UTF-8作为默认编码。我做错了什么?

0
0 Comments

问题的原因是源文件不是UTF-8编码。解决方法是阅读错误信息中链接的文章中的指示,并声明正确的字符集。

对于OP来说,我认为配置编辑器以保存他们期望的内容要比让编辑器强制使用糟糕的编码然后配置Python来处理它更有意义。通过使用编码声明,他们的代码将无法在从Stack Overflow或repl.it或其他使用UTF-8编码的在线网站上复制的人使用,并且他将无法使用不在他的OEM代码页中的字符等。

因此,解决该问题的方法是确保源文件使用UTF-8编码,并在文件开头添加如下编码声明:

# -*- coding: utf-8 -*-

0
0 Comments

问题的原因是使用的文本编辑器的编码方式不正确。Python默认将文件读取为UTF-8编码,但是由于文件不是UTF-8编码,导致读取失败。如果使用cp1252或类似的Windows传统编码方式编辑文件,将会导致"•"编码为"\x95",这不是有效的UTF-8编码,因为UTF-8字符的编码要么小于0x80,要么是大于等于0xC0的起始字节。因此会出现错误。("•"的UTF-8编码是"\xe2\x80\xa2")

解决方法有几种:

1. 如果你在Eclipse中配置了使用系统默认编码而不是UTF-8来编辑源代码,请修改配置。具体修改方法可以参考这个问题,在不同版本的Eclipse中修改默认编码的方法可能有所不同,可以尝试在"Preferences | General | Workspace | Text File Encoding"或"Preferences | General | Editors | Text editors"中进行设置。此外,在"Editor"下可能还有特定语言的编码设置,还可以设置每个项目的编码。

2. 另一种可能性是,Eclipse会自动检测现有文件的编码并保留它,而不是使用自己的首选编码。由于你使用的是Windows系统,很可能最初是用记事本或其他不适合编程的Windows编辑器创建的文件,默认使用的是系统的"OEM代码页"编码。如果是这样,请不要使用记事本编辑源代码。虽然可以强制记事本将文件导出为UTF-8编码,但这很麻烦(而且你的文件中可能会出现UTF-8-SIG前缀的问题)。

若要解决此问题,只需手动将文件另存为UTF-8一次,从此以后它将自动检测为UTF-8并正常工作。

3. 或者,你可以选择将文件保留在cp1252或其他编码方式,并使用PEP-263编码声明来覆盖默认的UTF-8编码。但是使用UTF-8编码会更加方便。

感谢你的回答!我需要将默认编码更改为UTF-8,与你在答案的第二部分中提到的类似(来自pydev.org/manual_101_eclipse.html)。

0