1
tommark 2014-03-17 12:53:12 +08:00
coding后面的编码(utf-8)要和你的py文件编码一致,你的a.py文本编码是utf-8的吗?
|
3
sobigfish 2014-03-17 13:07:09 +08:00
BOM? 记事本默认的是utf-8 with bom
|
4
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') |
6
rikka OP @VYSE
python3的sys模块已经移除了setdefaultencoding sys.stdout.encoding是cp1252 ===== # -- coding: utf-8 -- import sys PYTHONIOENCODING="utf-8" print(sys.stdout.encoding) a='大小写' print(a) ===== 也是报同样的错 |
7
josephshen 2014-03-17 13:46:13 +08:00
更改注册表,Console下的CodePage设置为65001,FaceName设为“新宋体”
|
8
rikka OP |
9
est 2014-03-17 14:56:10 +08:00
|
10
Shared 2014-03-17 14:56:23 +08:00
输入 chcp 看下活动代码页是不是 936,如果不是输入 chcp 936,之后应该就可以直接输出中文了
|
11
josephshen 2014-03-17 15:15:35 +08:00
console下执行chcp,告诉我结果,在线等
|
12
pianai 2014-03-17 15:18:03 +08:00
推荐ubuntu下学习
|
13
rikka OP |
14
josephshen 2014-03-17 15:26:36 +08:00
FaceName呢?
|
15
rikka OP @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' |
16
rikka OP @josephshen FaceName是新宋体
|
17
josephshen 2014-03-17 15:29:44 +08:00
python是python3.0??
|
18
rikka OP @josephshen
Python 3.0 (r30:67507, Dec 3 2008, 19:44:23) [MSC v.1500 64 bit (AMD64)] on win32 |
19
rikka OP 不过奇怪我系统是win7 64位,python也是下载64位的,这里怎么显示on win32
|
20
josephshen 2014-03-17 15:35:44 +08:00
用notepad++打开你的文件,告诉我你的文件编码。
|
21
intosec 2014-03-17 15:37:17 +08:00
是有这个问题,sqlmap在windows的cmd下也无法显示中文字符,改了cmd的字符集也没有用,当时想了个折衷的办法,就是用cygwin运行sqlmap。
|
22
rikka OP 右下角显示ansi as utf-8
没错啊 |
23
josephshen 2014-03-17 15:44:04 +08:00
来,用notpad++把编码转换成 utf-8,注意有BOM。
|
24
rikka OP @josephshen
把编码调来调去,最后还是调成utf8,但是报错变成 a='\u5927\u5c0f\u5199 ^ SyntaxError: EOL while scanning string literal |
25
josephshen 2014-03-17 15:45:28 +08:00
再跑一遍,告诉我你发现哪里有不同了
|
26
josephshen 2014-03-17 15:48:26 +08:00
好,告诉我,你现在觉得哪里出问题了
|
27
rikka OP @josephshen
哦,不是 a='\u5927\u5c0f\u5199 ^ SyntaxError: EOL while scanning string literal 这个报错是原因我写漏了一个引号 然后无论是 utf-8有BOM还是无BOM 报错信息跟一开始还是一样 |
28
josephshen 2014-03-17 15:53:10 +08:00
position 90??这个数字,变了没有??
|
29
rikka OP @josephshen
咦,这里有变化我没注意到 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> |
30
josephshen 2014-03-17 16:01:18 +08:00
刚上了厕所,
好,你现在告诉我,你觉得哪块出错了? |
31
rikka OP 发现在开头加上
print(repr(open(__file__).read())) 这句position有变化 现在代码是 # -- 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 93: character maps to <undefined> |
32
rikka OP 还是看不出哪里错了T_T
|
33
josephshen 2014-03-17 16:13:26 +08:00
好,你发现是print(repr(open(__file__).read()))有问题是吧?
|
34
josephshen 2014-03-17 16:14:43 +08:00
这句里面有很多条代码,你一个个展开,每一句分开写,再跑一遍,告诉我哪错了
|
35
xiaket 2014-03-17 16:21:51 +08:00
Windows下要玩python开个Linux虚拟机吧, 别折腾自己了.
|
36
rikka OP @josephshen
代码是 # -- coding: utf-8 -- import sys import os q=open(__file__).read() w=repr(q) print(w) a='大小写' print(a) # os.system("pause") ======= 报错是 Traceback (most recent call last): File "D:\a.py", line 4, in <module> q=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 102: character maps to <undefined> ====== 好像是open(__file__).read()这里错了,因为文件中有中文所以出了问题 |
37
josephshen 2014-03-17 16:27:59 +08:00
好,你现在找到了原因,解决办法另行Google。
|
38
gamexg 2014-03-17 16:33:30 +08:00
# -- coding: utf-8 --
import sys a='大小写' print(a) print(sys.stdout.encoding) print(sys.getdefaultencoding()) print(sys.getfilesystemencoding()) D:\>c:\Python33\python.exe t.py 大小写 cp936 utf-8 mbcs D:\>chcp 活动代码页: 936 D:\>c:\Python33\python.exe Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:55:48) [MSC v.1600 32 bit (In tel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> 我这里没有这个问题啊,奇怪的事情。 还有open这样用应该不会报错了 open(r"d:\111.txt",'w',encoding='utf8') |
39
rikka OP @josephshen 不是吧,TAT
|
40
rikka OP @gamexg
print(sys.stdout.encoding) print(sys.getdefaultencoding()) print(sys.getfilesystemencoding()) 我的结果是 cp1252 utf-8 mbcs |
41
gamexg 2014-03-17 16:50:08 +08:00
Cp1252 是标准的英语编码
改编码吧,cmd的 需要 chcp 936 。 |
42
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 |
43
rikka OP |
44
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> |
45
gamexg 2014-03-17 17:03:33 +08:00 1
|
47
lu18887 2014-03-17 17:21:10 +08:00
cp1252.py 额,你的字符都跑到这个cp1252.py 文件里去转码了,说明你的cp是1252啊!
|
48
gamexg 2014-03-17 17:34:17 +08:00
检查控制面板的区域和语言了吗?
格式是中文,管理里面的系统区域设置也得是中文。把修改的系统设置全部改回去。 如果系统实在是不能弄到cp936,下面的连接也许有用,但是并不是个好主意。 http://apoo.bokee.com/7028948.html |
49
josephshen 2014-03-17 17:39:51 +08:00
诶,你们这些人啊,我拉了个屎回来,就全都走样了。
你的open函数没有设定encoding,就这样。 |
51
rikka OP |
52
nulloo 2014-03-17 17:48:39 +08:00
我也遇到过 python3输出会检查编码 然后中文系统编码没搞定
最后放弃了,后来用colinux+ssh客户端运行了。。。 另外说一句。。。请大家分清python2和python3 两个版本不通用qaq 找py3资料结果搜到一堆py2的各种苦恼 |
53
Muninn 2014-03-17 18:01:52 +08:00
1. 珍爱生命远离百度
2. 玩python最好还是不要用windows 问题多多.可以用终端登服务器或者用linux虚拟机或者直接用mac或者linux. 3. 非要在windows上用,要知道终端是兼容GBK的 ,输出到终端的字符串encode成GBK就好了. |
54
josephshen 2014-03-17 18:02:04 +08:00
TMD,你贴了两种代码,你自己知不知道么?
一个执行了读文件,那个文件里面有中文,而且被编码成了utf8,所以你在open的时候需要指定编码格式。 另外一个,只是print了个中文,那个中文能不能正常显示,要看你的cmd编码。 还不明白?? |
55
josephshen 2014-03-17 18:04:01 +08:00
还有,你堂堂一个写代码的居然TMD用百度?!
我除了“呵呵”送给你,能找到答案就看你造化了。 |
56
zjxubinbin 2014-03-18 12:14:20 +08:00
@rikka Windows的话,去下载一个PowerShell就行了,比Linux下面的某些Shell更强大,而且默认就是UTF-8编码的
|
57
qqblog 2014-04-26 23:22:48 +08:00
垃圾系统,格了吧
|