能够在Eclipse中使用Unicode字符串运行Python代码,但在通过命令行或空闲运行时会出现UnicodeEncodeError。

能够在Eclipse中使用Unicode字符串运行Python代码,但在通过命令行或空闲运行时会出现UnicodeEncodeError。,python,eclipse,unicode,pydev,Python,Eclipse,Unicode,Pydev,我经历了很多,我将在Eclipse(PyDev)中解码/编码一些Unicode字符串,它运行得很好,正如我所期望的那样,但是当我从命令行(例如)启动相同的脚本时,我会得到编码错误 对此有什么简单的解释吗?Eclipse是否对Unicode做了一些事情/以不同的方式对其进行了操作 编辑: 例如: value = u'\u2019'.decode( 'utf-8', 'ignore' ) return value 这在Eclipse(PyDev)中有效,但如果我在空闲或命令行上运行它,则不起作用

我经历了很多,我将在Eclipse(PyDev)中解码/编码一些Unicode字符串,它运行得很好,正如我所期望的那样,但是当我从命令行(例如)启动相同的脚本时,我会得到编码错误

对此有什么简单的解释吗?Eclipse是否对Unicode做了一些事情/以不同的方式对其进行了操作

编辑:

例如:

value = u'\u2019'.decode( 'utf-8', 'ignore' )
return value
这在Eclipse(PyDev)中有效,但如果我在空闲或命令行上运行它,则不起作用

UnicodeEncodeError:“ascii”编解码器无法对135位置的字符u'\u2019'进行编码:序号不在范围内(128)

字节字符串被解码为Unicode字符串

Unicode字符串被编码为字节字符串

因此,如果您说
someunicodestring.decode
,它会尝试将Unicode字符串强制为字节字符串,以便能够对其进行解码(返回到Unicode!)。作为一种隐式转换,此编码步骤将使用默认编码,这可能在不同的环境中有所不同,并且可能是“安全”值
ascii
,这肯定会产生您提到的错误,因为ascii不能包含字符U+2019。依赖默认编码几乎从来都不是一个好主意

因此,尝试对Unicode字符串进行解码是没有意义的。我很确定你的意思是:

value = u'\u2019'.encode('utf-8')

ignore
对于UTF-8的编码是多余的,因为这种编码没有不能表示的字符。)

只是想添加它在PyDev上工作的原因:它有一个特殊的sitecustomize,它将通过sys.setdefaultencoding来定制python,以使用PyDev控制台的编码


请注意,bobince的响应是正确的,如果您有一个unicode字符串,则必须使用encode()方法将其转换为正确的字符串(如果您有一个字符串并希望将其转换为unicode,则使用decode)。

当您打印
时,永远不要
编码
——让它自动完成。然后它将“正常工作”,因为Python将检测您的编码,只要终端编码能够呈现所有unicode代码点。如果您告诉我们您的终端/操作系统是什么,我们可以告诉您如何设置。@agf但它与打印无关。。。这些错误之所以发生,是因为我必须将一些文本“翻译”成utf-8,以供另一个库处理,而且我收到的文本并不真正“统一”,有时我得到ascii,有时是其他类型的unicode。。。我一直在做“text.decode”('utf-8','ignore')…有没有“更好”的方法来解决这个问题?我想我们需要看看显示您问题的示例代码。您的脚本顶部是否有
-*-编码:utf-8-*-
?@agf,如果我在脚本的代码中写入unicode字符,这将是必需的…?我没有。我的问题在于我使用的是“在我的示例中,我实际上有一些“输入”并不总是Unicode的,也不总是字节字符串。这就是为什么我使用.decode语句。有更好的方法吗?如果可以,通常您会手动嗅探它,例如,
如果isinstance(s,Unicode):s=s.encode('utf-8'))
如果你总是想要字节,或者
如果isinstance(s,str):s=s.decode('utf-8','ignore')
如果你总是想要Unicode。哇,我真是太傻了。。我没想到“isinstance(s,Unicode)”适用于任何类型的Unicode。感谢你回答我的问题并修复了我的潜在问题!
value = u'\u2019'.encode('utf-8')