作者Tiberius (渴望平凡的幸福)
看板Python
标题Re: [问题] utf-8的问题
时间Mon Feb 11 18:48:06 2008
※ 引述《alvin17 (alvin17)》之铭言:
: 测试结果报告大大
: 将site.py对应的code改成
: if 1:
: # Enable to support locale aware default string encodings.
: import locale
: loc = locale.getdefaultlocale()
: if loc[1]:
: encoding = loc[1]
: 到Eclipse + Pydev底下执行以下之code
: import sys
: print sys.stdout.encoding
: 结果为
: None
嗯嗯 ... 刚刚也用手边的版本测了一下 (Eclipse 3.3.0 Pydev 1.3.10)
改过 site.py 让预设 string encoding 跟着 locale 连动之後
在 Eclipse 里面抓到的预设 string encoding 会是系统当时的 locale
(我用日文 WinXP, 所以是 cp932)
而 sys.stdout.encoding 的确也是 None
这时
print "中文测试" 会直接以「.py 档用的 encoding 输出, 不转码」
(因此,如果档案用的是预设的 cp932 就可以正常显示;如果存成 UTF-8 的话就不行)
而
print u"中文测试" 因为 sys.stdout.encoding == None
所以会采用系统预设 locale 转换之後输出
只要档案有正确地指明编码 (档头的
# coding: utf8 标记) 应该都可以输出
不过可能会遇到 UnicodeEncodingError
我个人是习惯以 UTF-8 储存 .py 档,然後只使用 unicode string
不过这在 terminal 采用 cp932/cp950 的时候很容易遇到 UnicodeEncodingError
所以有时候可以暴力一点:
import codecs, locale, sys
sys.stdout = (codecs
.lookup(locale.getdefaultlocale()[1])
.streamwriter(sys.stdout, 'replace'))
... 不过这样在 print 普通字串 (非 unicode 字串) 的时候却会炸掉
也不算是完美解就是了
唉唉 ... 还是 Linux 下面的 utf-8 terminal 方便啊 .....
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.126.63.79
※ 编辑: Tiberius 来自: 59.126.63.79 (02/11 18:49)