问一个弱智的问题,关于中文

问一个弱智的问题,关于中文

有一个文件 1.py
内容是
s=u'你好'
print s
用命令行执行python 1.py > 1.txt 出现以下错误:

Traceback (most recent call last):
  File "1.py", line 2, in <module>
    print s
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(12

单独执行python 1.py输出正确的结果,
但是我把s=u'你好'里的u去掉,中文就输入到文本里了,这是怎么回事?
你环境使用什么编码?如果是 gbk

[Copy to clipboard] [ - ]
CODE:
s=u'你好'
print s.encode('gbk')

其它编码 encode 成其它。 s 是个 unicode 对象,encode 后才变成 string 对象


[Copy to clipboard] [ - ]
CODE:
>>> s=u'您好'
>>> type(s)
<type 'unicode'>
>>> type(s.encode('utf8'))
<type 'str'>
>>>

如果不 encode, 输出时会自动 encode 成 ascii, 从而失败。
在文件头部加上
#-*-coding:gbk-*-
'你好'
正确的unicode字面量应该是   u'\u4f60\u597d'
而写成u'你好'实际是           u'\xc4\xe3\xba\xc3'

也就是说当前解释器会以设置的输入接受编码  gbk先解释'你好'成

ascii 编码 '\xc4\xe3\xba\xc3'

然后再添加一个unicode引用   当然是不对的


QUOTE:
原帖由 len(py) 于 2008-7-4 12:13 发表
'你好'
正确的unicode字面量应该是   u'\u4f60\u597d'
而写成u'你好'实际是           u'\xc4\xe3\xba\xc3'

也就是说当前解释器会以设置的输入接受编码  gbk先解释'你好'成

ascii 编码 '\xc4\xe3\xba\x ...

为什么只有在重定向的时候会出现这个错误呢?


QUOTE:
原帖由 可可熊 于 2008-7-4 13:23 发表



为什么只有在重定向的时候会出现这个错误呢?

不是使用管道的时候出现这个问题  任何时候都是这样的
中文编码是很麻烦,一直没有搞清楚过。
每个地方都可能影响编码,这是一个小测试:
windows xp
gvim 7.1
python 2.5
中文编码是很麻烦,一直没有搞清楚过。
每个地方都可能影响编码,这是一个小测试:
windows xp
gvim 7.1
python 2.5