最近用python做不少整理数据的工作,其中就包含不少关于中文处理的,所以总总结一下方便以后使用
1:json含汉字的utf编码读写
Python
f2 = codecs.open('country_ipnum.json', mode='rb', encoding='utf-8')
c = eval(f2.read())
1
2
f2=codecs.open('country_ipnum.json',mode='rb',encoding='utf-8')
c=eval(f2.read())
如此读取可以原样还原出json中的数据结构
Python
line = json.dumps(a['features'][i]) + '\n'
f3.write(line.decode("unicode_escape"))
1
2
line=json.dumps(a['features'][i])+'\n'
f3.write(line.decode("unicode_escape"))
在写入json的时候,可以这样每行都写入json,注意编码,可以确保把汉字写进入。
2:str和unicode转换
utf8样例:
‘asdasd’.decode(‘utf8’)
原理:
简单说来就是,python内部表示字符串用unicode(其实python内部的表示和真实的unicode是有点差别的,对我们几乎透明,可不考虑),和人交互的时候用str对象。
s.decode ——–>将s解码成unicode,参数指定的是s本来的编码方式。这个和unicode(s,encodename)是一样的。
u.encode ——–>将unicode编码成str对象,参数指定使用的编码方式。
助记:decode to unicode from parameter
encode to parameter from unicode
只有decode方法和unicode构造函数可以得到unicode对象。
上述最常见的用途是比如这样的场景,我们在python源文件中指定使用编码cp936,
# coding=cp936或#-*- coding:cp936 -*-或#coding:cp936的方式(不写默认是ascii编码)
这样在源文件中的str对象就是cp936编码的,我们要把这个字符串传给一个需要保存成其他编码的地方(比如xml的utf-8,excel需要的utf-16)
通常这么写:
strobj.decode(“cp936”).encode(“utf-16”)
3:文字比对
先type输出其类型,然后 最好使用==进行比较
if(c[k][‘country’].decode(‘utf8’) == a[“features”][i][‘properties’][‘country_cn’]):
在这里,前部分是str的汉字编码,用decode转换成utf8.然后与后半部分原本就是unucode进行对比
No related posts.