Alex的博客

本博客的文章均为原创,是本人从事行业多年来所遇见一些小问题的解决心得,希望可以帮助到大家!



Python Unicode与16进制字符串相互转换函数

Unicode转换方式:

Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。目前的Unicode字符分为17组编排,0x0000 至 0x10FFFF,每组称为平面(Plane),而每平面拥有65536个码位,共1114112个。然而目前只用了少数平面。UTF-8UTF-16UTF-32都是将数字转换到程序数据的编码方案。

 

1、Unicode字符串转换成16进制字符串:

注:在Python3.x中实现过程:

 

如:将’2014number中英文数字文转’这串字符串转换成16进制形式显示。

 

U_Str = u'2014number中英文数字文转'

[html] view plain copy
  1. '''  
  2.   
  3.   *Function:  Unicode2HexStr  
  4.   
  5.   * Description:  Unicode字符串转换为16进制字符串  
  6.   
  7.   *Input:  Unicde_Str要转换的Unicode字符串  
  8.   
  9.   *Return:  Hex_Str返回16进制字符串  
  10.   
  11.   *Others:  
  12.   
  13.  '''  
  14.   
  15. def Unicode2HexStr(Unicde_Str):  
  16.   
  17.     Hex_Str = ""  
  18.   
  19.     for i in range(0, len(Unicde_Str)):  
  20.   
  21.         Hex_Str += (hex(ord(Unicde_Str[i])).replace('0x','').zfill(4))  
  22.   
  23.     return Hex_Str  
  24.   
  25. print(Unicode2HexStr(U_Str))  


输出结果为:

0032003000310034006e0075006d0062006500724e2d82f1658765705b5765878f6c

函数说明:ord()

ord(...)

    ord(c) -> integer

 

Return the integer ordinal of a one-character string.

 

大体意思就是返回一个Unicode字符的int类型的序号,如:

‘2’这个数字字符的序号为50;

‘n’这个英文字符的序号为110;

这个中文字符的序号为20013;

 

ord()相对应的函数为chr()

chr(...)

    chr(i) -> Unicode character

 

Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.

意思就是将一个int类型序号转换成Unicode的字符

 

函数说明:hex()

hex(...)

    hex(number) -> string

 

    Return the hexadecimal representation of an integer.

 

       >>> hex(3735928559)

       '0xdeadbeef'

 

2、16进制字符串转换成Unicode字符串:

将上面的输出结果逆转回来:

函数如下:

str_uhex='0032003000310034006e0075006d0062006500724e2d82f1658765705b5765878f6c'

[html] view plain copy
  1. '''  
  2.   
  3. *Function:  HexStr2Unicode  
  4.   
  5. * Description:  16进制字符串转换为Unicode字符串  
  6.   
  7. *Input:  Hex_Str 16进制字符串  
  8.   
  9. *Return:  Unicde_Str Unicode字符串  
  10.   
  11. *Others:  
  12.   
  13. '''  
  14.   
  15. def HexStr2Unicode(Hex_Str):  
  16.   
  17. Unicde_Str = ""  
  18.   
  19. for i in range(0,len(Hex_Str)//4):  
  20.   
  21. unichr(int(Hex_Str[i*4:i*4+4], 16))  
  22.   
  23. Unicde_Str += unichr(int(Hex_Str[i*4:i*4+4], 16))  
  24.   
  25. return Unicde_Str  
  26.   
  27. print(HexStr2Unicode(str_uhex))  


用到的函数:int()

class int(object)

 |  int(x=0) -> integer

 |  int(x, base=10) -> integer

这里采用int(x, base=16) -> integer,x为数字字符串格式

浏览37  评论0  Alex于 2017-11-10 10:27
发言