python3 输出中文报错,代码应该没问题,感觉是 cmd 编码的问题,但是百度了好久还是无法解决

2014-03-17 12:35:14 +08:00
 rikka
# -- coding: utf-8 --
a='大小写'
print(a)
=========
使用idel能正常输出
但是运行python -u d:\a.py 就报这个错误
======================
Traceback (most recent call last):
File "D:\a.py", line 5, in <module>
print(a)
File "C:\Python30\lib\io.py", line 1491, in write
b = encoder.encode(s)
File "C:\Python30\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to <undefined>
25165 次点击
所在节点    Python
57 条回复
tommark
2014-03-17 12:53:12 +08:00
coding后面的编码(utf-8)要和你的py文件编码一致,你的a.py文本编码是utf-8的吗?
rikka
2014-03-17 13:00:09 +08:00
@tommark 确认是utf-8
sobigfish
2014-03-17 13:07:09 +08:00
BOM? 记事本默认的是utf-8 with bom
VYSE
2014-03-17 13:21:32 +08:00
sys.stdout.encoding是cp1252吧,print会将unicode a转成cp1252,结果就是转不了
PYTHONIOENCODING="utf-8" python ...
or
sys.setdefaultencoding('UTF-8')
rikka
2014-03-17 13:38:19 +08:00
@sobigfish 确认没有BOM
rikka
2014-03-17 13:40:52 +08:00
@VYSE
python3的sys模块已经移除了setdefaultencoding
sys.stdout.encoding是cp1252
=====
# -- coding: utf-8 --
import sys
PYTHONIOENCODING="utf-8"
print(sys.stdout.encoding)
a='大小写'
print(a)
=====
也是报同样的错
josephshen
2014-03-17 13:46:13 +08:00
更改注册表,Console下的CodePage设置为65001,FaceName设为“新宋体”
rikka
2014-03-17 14:35:55 +08:00
@josephshen
改完之后变成进入python交互模式无论输入任何语句或者错误不存在的函数都没报错也没显示什么东西
改成963
输入print('大小写')
显示???
est
2014-03-17 14:56:10 +08:00
@rikka

来,在有问题的python文件里贴个这行语句,把输出贴出来。

print repr(open(__file__).read())
Shared
2014-03-17 14:56:23 +08:00
输入 chcp 看下活动代码页是不是 936,如果不是输入 chcp 936,之后应该就可以直接输出中文了
josephshen
2014-03-17 15:15:35 +08:00
console下执行chcp,告诉我结果,在线等
pianai
2014-03-17 15:18:03 +08:00
推荐ubuntu下学习
rikka
2014-03-17 15:20:09 +08:00
@josephshen
注册表改成936执行chcp结果是437
注册表改成65001执行chcp结果是65001
josephshen
2014-03-17 15:26:36 +08:00
FaceName呢?
rikka
2014-03-17 15:27:53 +08:00
@est
代码是这样的# -- coding: utf-8 --
import sys
import os
print(repr(open(__file__).read()))
a='大小写'
print(a)
# os.system("pause")
===========
然后报错
Traceback (most recent call last):
File "D:\a.py", line 4, in <module>
print(repr(open(__file__).read()))
File "C:\Python30\lib\io.py", line 1724, in read
decoder.decode(self.buffer.read(), final=True))
File "C:\Python30\lib\io.py", line 1295, in decode
output = self.decoder.decode(input, final=final)
File "C:\Python30\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8f in position 90: character maps to <undefined>
=====
去掉
a='大小写'
print(a)
正常
'# -- coding: utf-8 --\nimport sys\nimport os\nprint(repr(open(__file__).read()))\n\n# os.system("pause") \n'
rikka
2014-03-17 15:28:23 +08:00
@josephshen FaceName是新宋体
josephshen
2014-03-17 15:29:44 +08:00
python是python3.0??
rikka
2014-03-17 15:32:17 +08:00
@josephshen
Python 3.0 (r30:67507, Dec 3 2008, 19:44:23) [MSC v.1500 64 bit (AMD64)] on win32
rikka
2014-03-17 15:33:36 +08:00
不过奇怪我系统是win7 64位,python也是下载64位的,这里怎么显示on win32
josephshen
2014-03-17 15:35:44 +08:00
用notepad++打开你的文件,告诉我你的文件编码。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/104648

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX