`
watershitter
  • 浏览: 42959 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

python 中文编码问题

阅读更多
python文件中文和  print 的中文的总结如下:
1 # coding=utf-8  或者 # coding=gbk 表明这个文件使用何种编码
如果出现非acs II 码,则必须制定编码
否则
s = "中文"

s = u"中文"     都会报错

2 print是python把 字符串丢给操作系统,再丢出之前,要求字符的编码与 文件指定的编码一致(而不必与操作系统默认编码一致, 貌似print 会根据 文件编码--》操作系统编码做自动转化)
假设 操作系统编码为gbk
# coding=gbk
s = "中文"
print s


# coding=utf-8
s = "中文"
print s
都没有问题

# coding=gbk
s = u"中文"
print s   // 报错,因为此时 s 是unicode 编码, 而文件指定的却是gbk
print s.encode("gbk")  //OK
print s.encode("utf-8") // 不报错,乱码

utf-8 与unicode是不同的
# coding=utf-8
s = u"中文"
print s   // 报错,因为此时 s 是unicode 编码, 而文件指定 utf-8 同样报错
print s.encode("utf-8")  //OK
print s.encode("gbk")    // 报错, 其原因是print引起的, 不是encode!是因为此时的utf8的编码gbk 也能识别。 尽管操作系统是 gbk,但是最终编码错误的,无法print

3 python 中的 str 和 "%s"%var
在文件中,str,和%s 作用基本相同
str(unicode_var) 和 "%s"%unicode_var ,如果unicode_var 中包含非ascII 的字符时,都将报错。

特例:在交互平台是, 可以 "%s"%unicode_var ,其中unicode_var 包含非asc2字符,如
>>> ss = u'中文'
>>> "%s"%ss    
u'\u4e2d\u6587'

str(ss)则报错
>>> str(ss)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)


×××特例××××
在交互控制台时,可以直接print unicode
>>> ss = u"中文"
>>> print ss
中文

但是不能被序列化
>>> str(ss)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

str相当于文件中的print (非控制台)
str不能直接针对unicode,必须是已经编码了的 “字节码序列”

3 关于字符长度
# coding=gbk  或者
s = "中文"
su = u"中文"
print len(s) // 4
print len(s.decode('gbk'))   // 2
print len(aa.decode('gbk').encode("utf-8")) //6,utf-8使用3字节表示一中文
pirnt len(su) //2
print s

//len在针对 被编码了的字符(其实字节数组),得到的字节个数,
// 针对unicode时候,可以想象是 数出了 unicode对象的个数(一个中文[|英文]一个unicode对象)

ps:最容易造成困惑的一种情况,

"%s  %s "%(codec1, codec2), 其中codec1,和codec2 编码不一致, unicode,与gbk,utf-8之类的编码混杂的情况。


更详细的参考文章:http://blog.csdn.net/mayflowers/archive/2007/04/18/1568852.aspx
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics