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>
24953 次点击
所在节点    Python
57 条回复
gamexg
2014-03-17 16:50:08 +08:00
Cp1252 是标准的英语编码
改编码吧,cmd的 需要 chcp 936 。
gamexg
2014-03-17 16:51:46 +08:00
类似的错误:

eclipse默认编码为Cp1252改成GBK的方法
http://blog.csdn.net/hao123huo/article/details/6917612
由一个小失误引起的Java编码格式问题大总结
http://hi.baidu.com/g4studio/item/c2e58c14d4c26a0db88a1a71
rikka
2014-03-17 16:55:39 +08:00
@gamexg
@josephshen
我觉得原因应该是cmd的编码问题,而且我的电脑好像无法设置chcp 936啊
cmd里面输入chcp 936,然后在输入chcp ,却显示437
gamexg
2014-03-17 16:56:17 +08:00
重现错误,将 cmd 编码设置为1252就会出现和楼主一样的错误,改回936就可以正常输出中文:

D:\>chcp 1252
Active code page: 1252

D:\>c:\Python33\python.exe t.py
Traceback (most recent call last):
File "t.py", line 4, in <module>
print(a)
File "c:\Python33\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: cha
racter maps to <undefined>
gamexg
2014-03-17 17:03:33 +08:00
是英文系统吗?
英文环境输出中文 [chcp 936 无效页解决方案]
http://blog.csdn.net/lcl_data/article/details/5269158
rikka
2014-03-17 17:04:23 +08:00
@gamexg
我电脑不知道怎么回事,好像真的无法设置chcp 936,这样无效啊
lu18887
2014-03-17 17:21:10 +08:00
cp1252.py 额,你的字符都跑到这个cp1252.py 文件里去转码了,说明你的cp是1252啊!
gamexg
2014-03-17 17:34:17 +08:00
检查控制面板的区域和语言了吗?
格式是中文,管理里面的系统区域设置也得是中文。把修改的系统设置全部改回去。

如果系统实在是不能弄到cp936,下面的连接也许有用,但是并不是个好主意。
http://apoo.bokee.com/7028948.html
josephshen
2014-03-17 17:39:51 +08:00
诶,你们这些人啊,我拉了个屎回来,就全都走样了。

你的open函数没有设定encoding,就这样。
rikka
2014-03-17 17:40:39 +08:00
@gamexg 我晚上再回去研究
rikka
2014-03-17 17:44:14 +08:00
@josephshen
q=open(__file__,'r',encoding='utf8').read()
也是报错的
这跟open好像没什么关系吧,我本来代码就不需要去用这个函数
nulloo
2014-03-17 17:48:39 +08:00
我也遇到过 python3输出会检查编码 然后中文系统编码没搞定
最后放弃了,后来用colinux+ssh客户端运行了。。。

另外说一句。。。请大家分清python2和python3 两个版本不通用qaq
找py3资料结果搜到一堆py2的各种苦恼
Muninn
2014-03-17 18:01:52 +08:00
1. 珍爱生命远离百度
2. 玩python最好还是不要用windows 问题多多.可以用终端登服务器或者用linux虚拟机或者直接用mac或者linux.
3. 非要在windows上用,要知道终端是兼容GBK的 ,输出到终端的字符串encode成GBK就好了.
josephshen
2014-03-17 18:02:04 +08:00
TMD,你贴了两种代码,你自己知不知道么?
一个执行了读文件,那个文件里面有中文,而且被编码成了utf8,所以你在open的时候需要指定编码格式。
另外一个,只是print了个中文,那个中文能不能正常显示,要看你的cmd编码。
还不明白??
josephshen
2014-03-17 18:04:01 +08:00
还有,你堂堂一个写代码的居然TMD用百度?!
我除了“呵呵”送给你,能找到答案就看你造化了。
zjxubinbin
2014-03-18 12:14:20 +08:00
@rikka Windows的话,去下载一个PowerShell就行了,比Linux下面的某些Shell更强大,而且默认就是UTF-8编码的
qqblog
2014-04-26 23:22:48 +08:00
垃圾系统,格了吧

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

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

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

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

© 2021 V2EX