Python中如何将含\x转义的混合格式Unicode字符串转为标准Unicode
混合Unicode转义字符串处理及格式说明
关于\x格式的名称
你提到的\x开头的格式叫做十六进制转义序列,它是一种用两位十六进制数表示单个字节的转义写法,常用来在字符串中表示无法直接显示的字节,常见于字节串或ASCII编码的文本表示场景。
字符串转换方法
以你提供的字符串It\xe2\x80\x99s up to you. ¢ € £ ¥ [为例,这里的\xe2\x80\x99是对应Unicode字符’(右单引号)的UTF-8编码字节序列,下面分两种常见场景给出处理方式:
场景1:字符串中\x被当作普通字符(即转义后的字符串,比如"It\\xe2\\x80\\x99s up to you. ¢ € £ ¥ [")
使用Python的codecs模块处理:
import codecs # 输入的带转义字符的字符串 input_str = "It\\xe2\\x80\\x99s up to you. ¢ € £ ¥ [" # 第一步:将unicode转义序列解码为字节串 byte_sequence = codecs.decode(input_str, 'unicode_escape').encode('latin-1') # 第二步:按UTF-8解码为正确的Unicode字符串 output_str = byte_sequence.decode('utf-8') print(output_str) # 输出:It’s up to you. ¢ € £ ¥ [
原理:unicode_escape会把\xXX转换为对应的字节,用latin-1编码是因为它是单字节一一映射的编码,不会修改字节值,这样就能得到原始的UTF-8字节序列,最后解码为Unicode字符即可。
场景2:直接拿到的是字节串(比如b"It\xe2\x80\x99s up to you. ¢ € £ ¥ [")
直接对字节串进行UTF-8解码即可:
input_bytes = b"It\xe2\x80\x99s up to you. \xc2\xa2 \xe2\x82\xac \xc2\xa3 \xc2\xa5 [" output_str = input_bytes.decode('utf-8') print(output_str) # 输出:It’s up to you. ¢ € £ ¥ [
内容的提问来源于stack exchange,提问作者whenitrains
相关产品推荐
相关产品推荐

