1 16进制字符串转换为中文
有时会出现字符串为 \xe6\xb5\x8b\xe8\xaf\x95 的情况
注意,这里并不是指下面的情况
#python代码
string1 = '\xe6\xb5\x8b\xe8\xaf\x95'
这里\x为一个整体,\xe6指代e6这个16进制数对应的acsii码,例子如下
>>> print('\x61')
a
网上搜的很多方法都是针对这种情况的,而且都是用python2直接decode再encode,python3已经没办法这么做了
而是指
string2 = '\\xe6\\xb5\\x8b\\xe8\\xaf\\x95'
这个字符串才代表\xe6\xb5\x8b\xe8\xaf\x95
有时从文件里面读取数据时,文件里直接就保存的\xe6\xb5\x8b\xe8\xaf\x95,这时python读取文件然后 fr.read()的结果就是string2的形式
个人的解决办法如下,感觉应该还有更方便的办法。。
#python代码
import binascii
string = '\\xe6\\xb5\\x8b\\xe8\\xaf\\x95'
print(string)
hex_str = string.replace('\\x','')
print(hex_str)
byte = binascii.a2b_hex(hex_str)
print(byte)
chs = byte.decode('utf-8')
print(chs)
输出结果:
\xe6\xb5\x8b\xe8\xaf\x95
e6b58be8af95
b'\xe6\xb5\x8b\xe8\xaf\x95'
测试
2 获取当前运行的脚本目录
os.path.dirname(os.path.abspath(file))