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

2024-10-02 20:29:49 发布

您现在位置:Python中文网/ 问答频道 /正文

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

对此有什么简单的解释吗?Eclipse是否对Unicode做了什么/以不同的方式操作它?在

编辑:

示例:

value = u'\u2019'.decode( 'utf-8', 'ignore' )
return value

这在Eclipse(PyDev)中可以工作,但如果我在Idle或命令行中运行它就不行了。在

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 135: ordinal not in range(128)


Tags: 字符串命令行in脚本编码value错误方式
2条回答

只是想补充一下它为什么在PyDev上工作:它有一个特殊的站点customize,它将通过sys.setdefaultencoding使用PyDev控制台的编码。在

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

value = u'\u2019'.decode( 'utf-8', 'ignore' )

字节串被解码成Unicode字符串。在

Unicode字符串被编码成字节字符串。在

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

所以尝试decode一个Unicode字符串是没有意义的。我敢肯定你的意思是:

^{pr2}$

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

相关问题 更多 >