Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
奇怪的Python字符编码现象_Python_Unicode_Utf 8_Matplotlib - Fatal编程技术网

奇怪的Python字符编码现象

奇怪的Python字符编码现象,python,unicode,utf-8,matplotlib,Python,Unicode,Utf 8,Matplotlib,我一直试图让matplotlib正确地显示作为轴标签的符号,但最终发现了一些令人困惑的东西,我希望这里的人能够对此有所了解 如果我在python控制台中键入以下内容:unicode“£”和“utf-8”,则会出现以下错误:UnicodeDecodeError:“utf8”编解码器无法解码位置0中的字节0xa3:无效的起始字节 然而,如果我执行一个python脚本,并将其作为我的唯一一行,我会得到打印出来的“£”符号,这就是我最终如何将“£”符号输入到我的绘图中的 print unicode('£

我一直试图让matplotlib正确地显示作为轴标签的符号,但最终发现了一些令人困惑的东西,我希望这里的人能够对此有所了解

如果我在python控制台中键入以下内容:unicode“£”和“utf-8”,则会出现以下错误:UnicodeDecodeError:“utf8”编解码器无法解码位置0中的字节0xa3:无效的起始字节

然而,如果我执行一个python脚本,并将其作为我的唯一一行,我会得到打印出来的“£”符号,这就是我最终如何将“£”符号输入到我的绘图中的

print unicode('£','utf-8')
有什么想法吗?感谢您提供的任何见解

编辑:

两个脚本和每个脚本的输出:

import matplotlib.pyplot as plt

plt.plot( [ 1, 2, 3 ] )
ax = plt.gca()
ax.set_ylabel( unicode( '£', 'utf-8' ) )
plt.show()
输出:

import matplotlib.pyplot as plt

plt.plot( [ 1, 2, 3 ] )
ax = plt.gca()
ax.set_ylabel( u'£' )
plt.show()
输出:

import matplotlib.pyplot as plt

plt.plot( [ 1, 2, 3 ] )
ax = plt.gca()
ax.set_ylabel( u'£' )
plt.show()
编辑2:

在我的第二个示例代码中添加coding:utf8不会改变什么:

#coding: utf8

import matplotlib.pyplot as plt

plt.plot( [ 1, 2, 3 ] )
ax = plt.gca()
ax.set_ylabel( u'£' )
plt.show()
输出:

import matplotlib.pyplot as plt

plt.plot( [ 1, 2, 3 ] )
ax = plt.gca()
ax.set_ylabel( u'£' )
plt.show()

尝试只使用unicode文字u'£'

您需要指定源文件的编码。在python脚本的顶部添加以下行:

#coding: utf8 

信息:

我想这是因为你的终端应用程序。你使用什么操作系统?你能在设置中检查你的终端字符编码是UTF-8吗?我使用的是Windows 7,在控制台和脚本中,以下返回“cp1252”:import sys;sys.getdefaultencodingI将该注释添加到脚本的顶部,它不会改变任何内容。脚本仍然有效,控制台也不行,您可以尝试sys.setdefaultencoding'utf-8'@Ben在调用setdefaultencoding之前您需要重新加载sys,但这不是一个好方法。我将编辑我的问题,以显示使用该方法的结果,并使用最小的工作示例matplotlib图。由于某些原因,使用u'.'不起作用。将其添加到我的源文件不会改变任何结果上面的例子。@Ben我想这是因为你的源文件实际上不是UTF-8。找出编辑器创建的编码,并使用相同的编码注释,但使用正确的编码字符串。如果你不知道,你可以试试windows-1252。@Ben再看一遍你的例子,我认为这个答案中推荐的编码注释应该可以修复第二个例子。UTF-8在被误解为cp1252时表示为英镑。@MarkRansom我试过了-参见我文章的编辑2。这没什么区别。@Ben您需要确保该行是文件的第一行或第二行,如果不是,则没有效果。