如何解码 python3 中的文本?
How to decode a text in python3?
我有一个文本 Aur\xc3\xa9lien
并想用 python 3.8.
解码它
我尝试了以下方法
import codecs
s = "Aur\xc3\xa9lien"
codecs.decode(s, "urf-8")
codecs.decode(bytes(s), "urf-8")
codecs.decode(bytes(s, "utf-8"), "utf-8")
但其中 none 给出了正确的结果 Aurélien
。
如何正确操作?
并且没有基本的、通用的权威简单页面来描述 python 的所有这些编码吗?
首先找到字符串的编码,然后对其进行解码...为此,您需要通过在原始字符串的前面添加字母 'b' 来制作字节字符串。
试试这个:
import chardet
s = "Aur\xc3\xa9lien"
bs = b"Aur\xc3\xa9lien"
encoding = chardet.detect(bs)["encoding"]
str = s.encode(encoding).decode("utf-8")
print(str)
如果您正在从文件中读取文本,您可以使用 magic
库检测编码,请参见此处:
您已将 UTF-8
解码为 latin-1
,因此解决方案是编码为 latin-1
,然后解码为 UTF-8
。
s = "Aur\xc3\xa9lien"
s.encode('latin-1').decode('utf-8')
print(s.encode('latin-1').decode('utf-8'))
Output
Aurélien
您的字符串不是 Unicode 序列,因此您应该在其前面加上 b
import codecs
b = b"Aur\xc3\xa9lien"
b.decode('utf-8')
所以你有预期的:'Aurélien'
。
如果你想使用s
,你应该使用mbcs
、latin-1
、mac_roman
或任何8位编码。没关系。这样的 8 位编解码器可以正确获取字符串中的二进制字符(1 对 1 映射)。所以你得到一个字节数组(所以现在你可以使用这个答案的第一部分,所以你可以解码二进制字符串。
我有一个文本 Aur\xc3\xa9lien
并想用 python 3.8.
我尝试了以下方法
import codecs
s = "Aur\xc3\xa9lien"
codecs.decode(s, "urf-8")
codecs.decode(bytes(s), "urf-8")
codecs.decode(bytes(s, "utf-8"), "utf-8")
但其中 none 给出了正确的结果 Aurélien
。
如何正确操作?
并且没有基本的、通用的权威简单页面来描述 python 的所有这些编码吗?
首先找到字符串的编码,然后对其进行解码...为此,您需要通过在原始字符串的前面添加字母 'b' 来制作字节字符串。
试试这个:
import chardet
s = "Aur\xc3\xa9lien"
bs = b"Aur\xc3\xa9lien"
encoding = chardet.detect(bs)["encoding"]
str = s.encode(encoding).decode("utf-8")
print(str)
如果您正在从文件中读取文本,您可以使用 magic
库检测编码,请参见此处:
您已将 UTF-8
解码为 latin-1
,因此解决方案是编码为 latin-1
,然后解码为 UTF-8
。
s = "Aur\xc3\xa9lien"
s.encode('latin-1').decode('utf-8')
print(s.encode('latin-1').decode('utf-8'))
Output
Aurélien
您的字符串不是 Unicode 序列,因此您应该在其前面加上 b
import codecs
b = b"Aur\xc3\xa9lien"
b.decode('utf-8')
所以你有预期的:'Aurélien'
。
如果你想使用s
,你应该使用mbcs
、latin-1
、mac_roman
或任何8位编码。没关系。这样的 8 位编解码器可以正确获取字符串中的二进制字符(1 对 1 映射)。所以你得到一个字节数组(所以现在你可以使用这个答案的第一部分,所以你可以解码二进制字符串。