如何将字符串从一个代码页转换为另一个代码页?
How to convert a string from one codepage to another?
我需要将此字符串转换为可读的内容。
'Old_video/\udcc2\udce8\udce4\udce5\udcee\udcef\udcf0\udce8\udcea\udcee\udceb\udcfb'
它没有.decode
方法,只有.encode
。
最糟糕的是我不确定这到底是什么代码页。可能是 "cp1251"
.
我在 python 3,但也欢迎回答 python 2。我不太明白到底发生了什么变化。
Probably it's "cp1251".
关闭...大概。
由于它充满了低代理项,我们可以看出它是使用 errors='surrogateescape'
解码的,所以首先我们需要使用它进行编码。
>>> 'Old_video/\udcc2\udce8\udce4\udce5\udcee\udcef\udcf0\udce8\udcea\udcee\udceb\udcfb'.encode('latin-1', errors='surrogateescape')
b'Old_video/\xc2\xe8\xe4\xe5\xee\xef\xf0\xe8\xea\xee\xeb\xfb'
现在我们可以尝试正确解码它了。
>>> 'Old_video/\udcc2\udce8\udce4\udce5\udcee\udcef\udcf0\udce8\udcea\udcee\udceb\udcfb'.encode('latin-1', errors='surrogateescape').decode('cp1251')
'Old_video/Видеоприколы'
如果文件名就是这样,那么恭喜你,你猜对了。
In Python 3 you can only .decode() bytes. – kichik Nov 8 '17 at 0:27
正确。 .decode 会将字节列表转换为字符串。
所以,如果你有一个字符串,你必须先用.encode()
把它转换成字节,然后.decode()
那个操作的结果
因此,例如,如果您有一些 utf-8 文本字符串并希望转换为代码页 1252(用于西欧计算机),
text = sourcetext.encode('cp1252').decode('utf-8')
一般来说应该是:
source_codepage = 'utf-8' # or whatever the current format is
target_codepage = 'cp1252' # or whatever format you like
newtext = sourcetext.encode(target_codepage).decode(source_codepage)
其中 source_codepage 和 target_codepage 是两个字符串,分别包含原始文本编码的名称和所需的名称。
可在此处找到 Python 中可用的代码页字符串的完整列表:https://docs.python.org/3/library/codecs.html#standard-encodings
我需要将此字符串转换为可读的内容。
'Old_video/\udcc2\udce8\udce4\udce5\udcee\udcef\udcf0\udce8\udcea\udcee\udceb\udcfb'
它没有.decode
方法,只有.encode
。
最糟糕的是我不确定这到底是什么代码页。可能是 "cp1251"
.
我在 python 3,但也欢迎回答 python 2。我不太明白到底发生了什么变化。
Probably it's "cp1251".
关闭...大概。
由于它充满了低代理项,我们可以看出它是使用 errors='surrogateescape'
解码的,所以首先我们需要使用它进行编码。
>>> 'Old_video/\udcc2\udce8\udce4\udce5\udcee\udcef\udcf0\udce8\udcea\udcee\udceb\udcfb'.encode('latin-1', errors='surrogateescape')
b'Old_video/\xc2\xe8\xe4\xe5\xee\xef\xf0\xe8\xea\xee\xeb\xfb'
现在我们可以尝试正确解码它了。
>>> 'Old_video/\udcc2\udce8\udce4\udce5\udcee\udcef\udcf0\udce8\udcea\udcee\udceb\udcfb'.encode('latin-1', errors='surrogateescape').decode('cp1251')
'Old_video/Видеоприколы'
如果文件名就是这样,那么恭喜你,你猜对了。
In Python 3 you can only .decode() bytes. – kichik Nov 8 '17 at 0:27
正确。 .decode 会将字节列表转换为字符串。
所以,如果你有一个字符串,你必须先用.encode()
把它转换成字节,然后.decode()
那个操作的结果
因此,例如,如果您有一些 utf-8 文本字符串并希望转换为代码页 1252(用于西欧计算机),
text = sourcetext.encode('cp1252').decode('utf-8')
一般来说应该是:
source_codepage = 'utf-8' # or whatever the current format is
target_codepage = 'cp1252' # or whatever format you like
newtext = sourcetext.encode(target_codepage).decode(source_codepage)
其中 source_codepage 和 target_codepage 是两个字符串,分别包含原始文本编码的名称和所需的名称。
可在此处找到 Python 中可用的代码页字符串的完整列表:https://docs.python.org/3/library/codecs.html#standard-encodings