dsi*_*ard 4 python unicode character-encoding
我试图通过回到基础知识来解决一些令人沮丧的编码问题.在Dive Into Python示例9.14(此处)中,我们有:
>>> s = u'La Pe\xf1a'
>>> print s
Traceback (innermost last): File "<interactive input>", line 1, in ?
UnicodeError: ASCII encoding error: ordinal not in range(128)
>>> print s.encode('latin-1')
La Peña
Run Code Online (Sandbox Code Playgroud)
但在我的机器上,这种情况发生了:
>>> sys.getdefaultencoding()
'ascii'
>>> s = u'La Pe\xf1a'
>>> print s
La Peña
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这些不同.任何人?
默认编码print
不依赖于sys.getdefaultencoding()
,而是依赖于sys.stdout.encoding
.如果您使用eg启动python LANG=C
或将python脚本重定向到文件,则stdout的编码将是ANSI_X3.4-1968
.另一方面,如果sys.stdout
是终端,它将使用终端的编码.
解释是什么sys.getdefaultencoding()
- 当从/向unicode隐式转换字符串时使用它.在此示例中,str(u'La Pe\xf1a')
默认ASCII编码将失败,但使用修改后的默认编码,它会将字符串编码为Latin-1.但是设置默认编码是一个可怕的想法,当你想从去你应该始终使用显式编码unicode
来str
.
归档时间: |
|
查看次数: |
386 次 |
最近记录: |