Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将编码错误的字节字符串转换为正常字符串?_Python - Fatal编程技术网

Python 如何将编码错误的字节字符串转换为正常字符串?

Python 如何将编码错误的字节字符串转换为正常字符串?,python,Python,我有一个格式如下的字符串,但似乎我真的无法将其转换为普通字符串,因为我真的不知道string\u original的格式 string_original = b'sab\\u00e3o em p\\u00f3' 答案是: string = 'sabão em pó' >>> string_original.decode('unicode-escape') 'sabão em pó' 编码为字节的字符串可以具有 两位十六进制转义字符\x**或 四位Unicode转义字符\

我有一个格式如下的字符串,但似乎我真的无法将其转换为普通字符串,因为我真的不知道
string\u original
的格式

string_original = b'sab\\u00e3o em p\\u00f3'
答案是:

string = 'sabão em pó'
>>> string_original.decode('unicode-escape')
'sabão em pó'

编码为
字节的字符串可以具有

  • 两位十六进制转义字符
    \x**
  • 四位Unicode转义字符
    \u****
  • 八位Unicode转义字符
    \U*********
十六进制转义字符可以使用

byte_object.decode('encoding') # encoding = utf-* / ascii / iso-8859-*
byte_object.decode('unicode-escape')
Unicode转义字符可以使用

byte_object.decode('encoding') # encoding = utf-* / ascii / iso-8859-*
byte_object.decode('unicode-escape')
您的问题的代码实现是:

string = 'sabão em pó'
>>> string_original.decode('unicode-escape')
'sabão em pó'
由于您不知道编码,因此可以执行逐字节检查,查看数据包含哪些字节值,并可能将
\u
\u
转换为相应的
\x

>>> for byte in "ã".encode('unicode-escape'): # ã --> U+00E3
        print(hex(byte))
    
0x5c        --> \
0x78        --> x
0x65        --> e
0x33        --> 3

>>> for byte in "Æ".encode('unicode-escape'): # Æ --> U+00C6
        print(hex(byte))
    
0x5c        --> \
0x78        --> x
0x63        --> c
0x36        --> 6 (Hope you see the pattern by now)
查看有关使用Python的Unicode字符的更多信息


这是一个从
U+0000
U+00FF

编码为
字节的字符串可以具有

  • 两位十六进制转义字符
    \x**
  • 四位Unicode转义字符
    \u****
  • 八位Unicode转义字符
    \U*********
十六进制转义字符可以使用

byte_object.decode('encoding') # encoding = utf-* / ascii / iso-8859-*
byte_object.decode('unicode-escape')
Unicode转义字符可以使用

byte_object.decode('encoding') # encoding = utf-* / ascii / iso-8859-*
byte_object.decode('unicode-escape')
您的问题的代码实现是:

string = 'sabão em pó'
>>> string_original.decode('unicode-escape')
'sabão em pó'
由于您不知道编码,因此可以执行逐字节检查,查看数据包含哪些字节值,并可能将
\u
\u
转换为相应的
\x

>>> for byte in "ã".encode('unicode-escape'): # ã --> U+00E3
        print(hex(byte))
    
0x5c        --> \
0x78        --> x
0x65        --> e
0x33        --> 3

>>> for byte in "Æ".encode('unicode-escape'): # Æ --> U+00C6
        print(hex(byte))
    
0x5c        --> \
0x78        --> x
0x63        --> c
0x36        --> 6 (Hope you see the pattern by now)
查看有关使用Python的Unicode字符的更多信息


这是一个从
U+0000
U+00FF

的很棒的例子。我学到了一些新的东西,我不知道
'unicode-escape'
编码。@SorousHBakhtiary还有
原始unicode-escape
,有时也很有用。有时
原始unicode转义
unicode转义
一起可能有助于解码更复杂的字符串-使用更多\
raw-unicode-escape
很有趣,通过这个线程了解更多信息:D
'sab\\u00e3o em p\\u00f3'.encode('raw-unicode-escape')。decode('unicode-escape')
非常感谢。理解和学习。很好。我学到了一些新的东西,我不知道
'unicode-escape'
编码。@SorousHBakhtiary还有
原始unicode-escape
,有时也很有用。有时
原始unicode转义
unicode转义
一起可能有助于解码更复杂的字符串-使用更多\
raw-unicode-escape
很有趣,通过这个线程了解更多信息:D
'sab\\u00e3o em p\\u00f3'.encode('raw-unicode-escape')。decode('unicode-escape')
非常感谢。理解和学习。
chardet
模块用于猜测未知文本的编码,尽管我不确定您是否有足够的文本使其可靠。
chardet
模块用于猜测未知文本的编码,尽管我不确定您是否有足够的文本使其可靠。