python对16位unicode汉字处理

来源:互联网 发布:mysql怎么删除数据库 编辑:程序博客网 时间:2024/06/13 04:12

 最近笔者遇到了一个头疼的问题,从一个文件中读出的字符串里所有的汉字都是由unicode编码的,必须对这些字符串进行解码,将汉字还原。例如:字符串中是"/u7ae0",必须把它转换为u"/7ae0",即汉字中的“章”。

就这样一个简单的汉字解码,笔者尝试了三次之后才搞定。

1. 第一阶段,粗放式的原始社会

  在python中有直接对单个unicode进行解码的函数,unichr()函数,通过它可以将输入的字符串转换为unicode码,但是要注意的是,unichr()函数的输入参数不是字符串,所以必须首先把字符串专程整型。
  第一种方法为

  ncode = int(char1,16)

  uchar = unichr(ncode) 

  这样可以把单一个汉字转换,但是问题是,字符串中有大量的待转换,甚至有的字符串中就有十万记待转换的汉字字符,这样必须使用循环对每个字符进行转换,严重影响效率。

2.第二阶段,众里寻他千百度

 第一种方法实在是不能满足需求,就在笔者将要放弃之时,在网上搜索到了解决的办法。使用decode/encode函数,decode函数和encode函数接受一个字符串做参数返回该字符串对应的解码后/编码后的字符串。其实这个函数之前就有考虑过,但是没找到对应的参数。

  解决方法:

    str = str.decode('unicode_escape')

    str = str.encode('gbk')

  第一步将字符串解码为unicode,第二步将unicode码编码为gbk汉字码。

此种方法能够将整个字符串中的汉字全部编码。

3.第三阶段,排除小问题

  有了第二种方法,貌似问题迎刃而解,但是在实际使用过程中,还出现了一个小问题,在解码中,字符串中反斜杠字符被误认为转义字符了,存在部分反斜杠被误解码。

 解决的方法是一个笨办法:

  首先将/u替换其他某个字符如 “%u”,然后把所有的“/”,替换为“%$”,然后再把“%u”替换回来,再使用上面提的方法进行解码,解码完之后,再将“%$”替换为"/",这样问题解决了,貌似也没有太多的性能损失。

  不知道有没有更好的办法,今后碰到了再想更优化的办法~