接Unicode及编码处理心得

你那里可能有些地方不是太清楚吧,比如没有说到decode,所以很多人还是不明白
怎么转来转去的,我来补充一下,可能大部分跟你所说的有重复。

unicode字符串其实字符串以unicode为内码存放在内存中。有些平台上,使用2个
字节表示一个字符(英文字母和中文汉字都是用双字节来表示),称为UCS-2;也
有平台采用4字节表示一个字符,称为UCS-4;这时,2个字节(或4个)是作为一
个单位来处理的,拆开没有意义,就好像一个 ascii字符的字节只取4个位的值一
样。python采用的是UCS-2。因为unicode字符串包括了几乎所有文字,所以我们应
该尽量采用 unicode字符串。

(UCS-2和UCS-4这可以在网上找到解释。)

以上讲的是内码,如果要把unicode字符串通过网络发送,或者写入文件,这些都
是流IO处理,以字节为单位,也称字节流。这就要把双字节或四字节单位转成字节
单位,称为编码(encode);而一个非unicode字符串要转换成unicode字符串,就
称为解码(decode)。

另外要区分UCS-2和utf-16,前面已经说了,UCS-2中单个字节无意义,不代表哪
一个字符,所以要把unicode字符串以utf-16编码存入文件,也要编码:
f = open ('test.txt', 'wb+') #注意要以二进制方式打开文件
a = unicode('中国', 'cp936')
# 生成一个unicode字符串,可以用a = '中国'.decode('cp936')替换,可能会更
清楚,与encode调用对称。
f.write(a.encode('utf-16'))
#可以试试其它编码如utf-8,会生成unicode文件头标识,WindowsXP的记事本也能
够识别这种格式,打开另存为,就会显示当前的编码。
f.close()

另外,调用unicode('中国', 'cp936')就是一个解码。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值