如何在python中显示非英文字符?

alw*_*btc 3 python encoding dictionary ascii character-encoding

我有一个python字典,其中包含非英文字符的项目.当我打印字典时,python shell不能正确显示非英文字符.我怎样才能解决这个问题?

jsa*_*nen 7

当您的应用程序打印hei\xdfen而不是heißen,它意味着您实际上并不打印实际的unicode字符串,而是打印unicode对象的字符串表示形式.

让我们假设您的字符串("heißen")存储在名为的变量中text.只是为了确定你在哪里,通过调用以下方法检查这个变量的类型:

>>> type(text)
Run Code Online (Sandbox Code Playgroud)

如果你得到<type 'unicode'>,这意味着你不是在处理一个字符串,而是一个unicode对象.

如果你做了直观的事情,并尝试通过调用打印到文本,print(text)你将不会得到实际的文本("heißen"),而是一个unicode对象的字符串表示.

要解决此问题,您需要知道终端具有哪种编码,并打印出根据给定编码编码的unicode对象.

例如,如果您的终端使用UTF-8编码,您可以通过调用打印出一个字符串:

text.encode('utf-8')
Run Code Online (Sandbox Code Playgroud)

这是基本概念.现在让我给你一个更详细的例子.我们假设我们有一个存储您字典的源代码文件.喜欢:

mydict = {'heiße': 'heiße', 'äää': 'ööö'}
Run Code Online (Sandbox Code Playgroud)

当你输入时,print mydict你会得到{'\xc3\xa4\xc3\xa4\xc3\xa4': '\xc3\xb6\xc3\xb6\xc3\xb6', 'hei\xc3\x9fe': 'hei\xc3\x9fe'}.即使print mydict['äää']不起作用:它会产生类似的结果?Â?Â?Â.通过尝试print type(mydict['äää'])可以告诉您正在处理string对象来揭示问题的本质.

为了解决这个问题,首先需要将源代码文件的字符串中的字符串表示形式解码为unicode对象,然后将其表示在终端的字符集中.对于个别字典项目,可以通过以下方式获得:

print unicode(mydict, 'utf-8')
Run Code Online (Sandbox Code Playgroud)

请注意,如果默认编码不适用于您的终端,则需要编写:

print unicode(mydict, 'utf-8').encode('utf-8')
Run Code Online (Sandbox Code Playgroud)

外编码方法根据您的终端指定编码.

我真的非常恳请你阅读Joel的"绝对最低限度,每个软件开发人员绝对必须知道Unicode和字符集(没有借口!)".除非您了解字符集的工作原理,否则您将一次又一次地遇到与此类似的问题.


Tom*_*rdt 4

实际上,这并不是一个与 Python 相关的问题。

您的环境变量(我假设您使用的是 Linux 或 Mac)应该启用 UTF-8 字符编码。

您应该能够将它们放入 ~/.profile (或 ~/.bashrc)文件中:

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

-编辑-

实际上,Mac 默认使用 UTF-8。这是一个 Windows/Linux 问题。

-编辑2-

当然,您应该始终使用 unicode 字符串、unicode 编辑器和 unicode 文档类型。但我假设你知道这一点:-)