ubuntu下vi建立python文件时的中文问题

今天是学习python的第一天,和其他所有语言一样,我首先就编码问题对python的字符串操作进行学习,很不幸,刚开始就遇到了问题;


首先,在ubuntu下,用vi新建一个a.py,输入以下代码:

s = '中文';

print s;

保存后,运行python a.py,出现了以下错误:

SyntaxError: Non-ASCII character '\xe4' in file b.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

ok,我们可以看到,python很明显地提示我说,没有设置编码,那么好,我们就为它设置以下编码,要处理中文,我们立马就该想到用GBK、gb2312或者Unicode,好,先用GBK试一下(gb2312就不用试了,毕竟与GBK是兼容的),修改a.py文件内容:

#coding=gbk

s = '中文';

print s;

保存后,再次运行,很悲剧,又有错误:

SyntaxError: 'gbk' codec can't decode bytes in position 7-8: illegal multibyte sequence

这是什么个情况?我再用unicode试一试,为了兼容ansi,我采用了utf-8,修改a.py文件内容如下:

#coding=utf-8

s = '中文‘;

print s;

保存后,再次运行,额,神奇,搞定了,正确输出了“中文”两个汉字。

这是为什么呢?查看一下a.py的文件保存格式:

:set fileencodoing

输出了 fileencoding=utf-8,可以看到a.py在我的ubuntu上默认是以utf-8格式来保存的,想以gbk的编码来解释,当然行不通。


起初还以为是vi在以utf-8格式保存文件时,会在文件头插入BOM,但是经过以下测试,发现不是这个问题:

#coding=gbk

import codecs;
data=open('b.py').read();
print len(data);
if data[:3] == codecs.BOM_UTF8:
 data=data[3:];
print len(data);
输出的长度都是36,说明没有BOM字节,不过在windows的某些软件就难说了,比如notepad,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。
因此我们在读取时需要自己去掉这些字符,python中的codecs module定义了这个常量:
# coding=gbk
import codecs;
data = open("a.py").read();
if data[:3] == codecs.BOM_UTF8:
 data = data[3:];
print data.decode("utf-8");

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值