alw*_*btc 3 python encoding dictionary ascii character-encoding
我有一个python字典,其中包含非英文字符的项目.当我打印字典时,python shell不能正确显示非英文字符.我怎样才能解决这个问题?
当您的应用程序打印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和字符集(没有借口!)".除非您了解字符集的工作原理,否则您将一次又一次地遇到与此类似的问题.
实际上,这并不是一个与 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 文档类型。但我假设你知道这一点:-)