在Python 3.6.5中打印Unicode字符

时间:2018-07-03 02:14:40

标签: python python-3.x utf-8

我正在Windows的Eclipse中使用PyDev在Python 3.6.5中编写代码。运行以下一行代码时出现错误:

print("•")

这是我得到的错误:

SyntaxError: Non-UTF-8 code starting with '\x95' in file C:\Users\short\workspace\Python Test 4\src\foo.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

我认为Python 3.6应该使UTF-8成为默认编码。我在做什么错了?

2 个答案:

答案 0 :(得分:2)

问题不在于Python,而是文本编辑器。 Python 默认将文件读取为UTF-8,但是由于您的文件不是UTF-8,因此失败。

如果您将文件编辑为cp1252或类似的旧版Windows代码页,则会编码为\x95。这是无效的UTF-8,因为UTF-8字符始终位于0x80以下,或者起始字节> = 0xC0。因此,错误。 (的UTF-8是\xe2\x80\xa2。)


如果您已将Eclipse配置为使用系统的默认编码而不是UTF-8编辑源代码,请修复该问题。 This question显示了如何为各种版本的Eclipse更改跨语言默认设置,但简短的版本是Preferences | General | Workspace | Text File EncodingPreferences | General | Editors | Text editors。在Editor下的某个位置还有每个语言的替代,您也可以设置每个项目的替代。


另一种可能性:默认情况下,Eclipse将自动检测现有文件的编码并保留它,而不是使用其自己的首选编码。由于您使用的是Windows,因此很可能最初是使用记事本(或其他非用于编程的Windows编辑器)创建的文件,默认情况下是系统的“ OEM代码页”。

如果是这样,请不要这样做。切勿使用记事本触摸源代码。当您可以强制记事本将文件导出为UTF-8时,这很麻烦(然后您将在所有文件中遇到\xef\xbb\xbf UTF-8-SIG前缀的问题)。如果您不想出于某种原因而使用Eclipse本身,几乎所有其他自由文本编辑器都可以使用。

如果这是问题所在,要修复它,您只需手动将文件另存为UTF-8,然后从现在开始将其自动检测为UTF-8并正常工作。


或者,您可以将文件保留在cp1252或其他任何文件中,并使用错误消息中提到的PEP-263编码声明来覆盖UTF-8默认设置。但是使用UTF-8会更快乐。

答案 1 :(得分:1)

您的源文件不是UTF-8。

>>> '•'.encode('cp1251')
b'\x95'

阅读错误消息中链接到的文章中的说明,并声明正确的字符集。