【问题标题】:How to convert a string from one codepage to another?如何将字符串从一个代码页转换为另一个?
【发布时间】:2017-11-08 00:21:14
【问题描述】:

我需要将此字符串转换为可读的内容。

'Old_video/\udcc2\udce8\udce4\udce5\udcee\udcef\udcf0\udce8\udcea\udcee\udceb\udcfb'

它没有.decode方法,只有.encode

最糟糕的是,我不确定这到底是什么代码页。可能是"cp1251"

我使用的是 python 3,但也欢迎使用 python 2 的答案。我不太明白到底发生了什么变化。

【问题讨论】:

  • 在 Python 3 中你只能.decode() 字节。

标签: python codepages


【解决方案1】:

可能是“cp1251”。

关闭...ish。

由于它充满了低代理,我们可以看出它是使用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/Видеоприколы'

如果文件名应该是这样,那么恭喜你,你猜对了。

【讨论】:

    【解决方案2】:

    在 Python 3 中,您只能使用 .decode() 字节。 – kichik 2017 年 11 月 8 日 0:27

    正确。 .decode 将字节列表转换为字符串。 所以,如果你有一个String,你必须先用.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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多