Python解析\u字符串,\x字符串,十六进制字符串

问题描述

s = '\u4f60\u597d'
s = '\xe6\x97\xa9\xe4\xb8\x8a\xe5\xa5\xbd'
s = '\xc4\xe3\xba\xc3'




\u字符串

编码

import json

print(json.dumps('你好'))  # "\u4f60\u597d"

解码,直接print


s = '\u4f60\u597d'
print(s)  # 你好
print(str(s))  # 你好
print(repr(s))  # '你好'




\x字符串

编码

print('你好'.encode('utf-8'))  # b'\xe4\xbd\xa0\xe5\xa5\xbd'
print('你好'.encode('gbk'))  # b'\xc4\xe3\xba\xc3'

encode('raw_unicode_escape') 将 str 转 bytes,再解码

s = '\xe4\xbd\xa0\xe5\xa5\xbd'
print(s.encode('raw_unicode_escape').decode('utf-8'))  # 你好
s = '\xc4\xe3\xba\xc3'
print(s.encode('raw_unicode_escape').decode('gbk'))  # 你好




十六进制字符串

编码

import base64

print(base64.b16encode('你好'.encode()))  # b'E4BDA0E5A5BD'

解码,调用 base64

import base64

s = 'E4BDA0E5A5BD'
print(base64.b16decode(s))  # b'\xe4\xbd\xa0\xe5\xa5\xbd'
print(base64.b16decode(s).decode())  # 你好

或用 binascii

import binascii

print(binascii.b2a_hex('你好'.encode()))  # b'e4bda0e5a5bd'
print(binascii.a2b_hex('e4bda0e5a5bd').decode())  # 你好




检测类型

pip install chardet

调用 chardet.detect()

import chardet

s = '你好'.encode()
print(chardet.detect(s))  # {'encoding': 'utf-8', 'confidence': 0.7525, 'language': ''}

s = b'\u4f60\u597d'
print(chardet.detect(s))  # {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}

s = b'\xe6\x97\xa9\xe4\xb8\x8a\xe5\xa5\xbd'
print(chardet.detect(s))  # {'encoding': 'utf-8', 'confidence': 0.87625, 'language': ''}

s = b'\xc4\xe3\xba\xc3'
print(chardet.detect(s))  # {'encoding': 'TIS-620', 'confidence': 0.3598212120361634, 'language': 'Thai'}

最后一个出错




参考文献

  1. 标准编码
  2. 编码和解码十六进制数
  3. chardet/chardet: Python 2/3 compatible character encoding detector.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XerCis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值