免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: Levin_1221
打印 上一主题 下一主题

source code encoding问题,我找了半天都没找到原因:( [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-03-06 15:29 |只看该作者
原帖由 jiangpeng311 于 2009-3-6 15:28 发表
唉……
说了多少次了# -*- coding: utf-8 -*-是给Emacs看的,编辑器存成什么编码,python就怎么读这个文件,不是靠读了这个注释再去判断文件的编码的

这个是给py看的哦,表明当前脚本运行时候是采用utf的哦。里面中文字这样的才能正确输出哦

论坛徽章:
0
12 [报告]
发表于 2009-03-06 16:33 |只看该作者
原帖由 jiangpeng311 于 2009-3-6 15:28 发表
唉……
说了多少次了# -*- coding: utf-8 -*-是给Emacs看的,编辑器存成什么编码,python就怎么读这个文件,不是靠读了这个注释再去判断文件的编码的


我觉得你的解释不大对。
换成#coding = utf-8是一样的结果。
我开始也认为这个coding只是在进行声明为u''的对象时才有用,python分析器按照.py存的编码格式来解码,但是,如果不加coding说明,则会报non-ascii这个错。所以,python是使用这个注释来解析文件了的。

论坛徽章:
0
13 [报告]
发表于 2009-03-06 16:39 |只看该作者
coding后不能跟空格!
这是问题所在……

论坛徽章:
0
14 [报告]
发表于 2009-03-06 16:44 |只看该作者
原帖由 xiaoyu9805119 于 2009-3-6 15:28 发表
编辑器和IDE保存文件时候都要看下。有可能默认就存为utf8了
1.如果coding为gbk或cp936之类,文件另存编码是ANSI
2.如果指定为utf8,文件就得存为utf8格式。

最好坚持统一编码,省的烦。



这个我也知道,平时也都这么弄的。只是无意中发现了这个问题,觉得不知道该怎么解释,因为这和之前理解的python对源文件的解析过程相悖了。
我再说一下问题:源文件编辑和保存都是GBK格式(windows xp下的本地ASNI,pythonwin),然后编码声明coding为utf-8,为什么解析出来的码却是GBK格式,而不是utf-8格式,或者为什么不报错。

论坛徽章:
0
15 [报告]
发表于 2009-03-06 16:57 |只看该作者
原帖由 victorlee129 于 2009-3-6 16:39 发表
coding后不能跟空格!
这是问题所在……

sorry,刚才写的时候没注意,源文件中是coding=utf-8.
如果coding = utf-8的话,那么相当于认为没有找到对应的解码类型,用默认的ascii解码,所以即使是跟了空格,那么应该是报错,而不是我看到的结果。

论坛徽章:
0
16 [报告]
发表于 2009-03-06 17:09 |只看该作者
原帖由 Levin_1221 于 2009-3-6 16:44 发表



这个我也知道,平时也都这么弄的。只是无意中发现了这个问题,觉得不知道该怎么解释,因为这和之前理解的python对源文件的解析过程相悖了。
我再说一下问题:源文件编辑和保存都是GBK格式(windows xp下 ...

恩,我刚才试了下,确实如此。
不管把coding改成utf-8,或者iso8859,都可以显示中文,repr也是和gbk一样。
去研究下看看

论坛徽章:
0
17 [报告]
发表于 2009-03-06 17:21 |只看该作者
下面这个问题让我更加晕了…………
python 2.5 Documentation 里面说了utf-8的codec是utf_8,别名有U8, UTF, utf8。我用coing=utf-8和coding=utf_8,运行的结果和之前的一样。
但是用coding=U8,coding=UTF,coding=utf8,运行的话,就会报syntaxerror:'utf8' codec can't decode 0xb9 in position 5:unexpected code byte.
0xb9是'哈'的第一个code byte,这样的话似乎就和之前想的用coding指定的格式来对源文件解码符合了,可utf_8,utf-8,utf,u8,utf8是一样的啊。虽然在pythonwin IDE中check源文件的话提示utf8,u8,utf是unknow encoding,不过在cmd里运行的话,根据报的错可以看出,这几个别名是有效的。我更加晕了。。。谁能解释一下吗?

论坛徽章:
0
18 [报告]
发表于 2009-03-06 17:28 |只看该作者
原帖由 Levin_1221 于 2009-3-6 17:21 发表
下面这个问题让我更加晕了…………
python 2.5 Documentation 里面说了utf-8的codec是utf_8,别名有U8, UTF, utf8。我用coing=utf-8和coding=utf_8,运行的结果和之前的一样。
但是用coding=U8,coding=UTF,co ...

不要管这些了,用utf8或者utf-8,看的多了容易晕。

论坛徽章:
0
19 [报告]
发表于 2009-03-06 17:33 |只看该作者
原帖由 xiaoyu9805119 于 2009-3-6 17:28 发表

不要管这些了,用utf8或者utf-8,看的多了容易晕。


嗯,确实,看得越多发现迷惑的越多。
版主你用utf8和utf-8这两种试试,看到的结果应该和我刚才说的一样。一个报错,一个有结果

论坛徽章:
0
20 [报告]
发表于 2009-03-06 17:36 |只看该作者

回复 #19 Levin_1221 的帖子

用#coding:utf8
SyntaxError: 'utf8' codec can't decode bytes in position 5-6: invalid data

那就用utf-8,太神奇+诡异了,还没这么试过,一直习惯utf-8或者gbk,其他都没试过
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP