【问题标题】:How to determine the type of encoding of a particular string? [duplicate]如何确定特定字符串的编码类型? [复制]
【发布时间】:2015-05-20 02:54:53
【问题描述】:

我尝试查看各种 SO 答案,但没有发现足够有建设性的答案。我需要知道的是这个\x86\x9cG<!\xd9F@\xb4\n\xd6\xd4(\x9cb\xfe是一种什么样的编码格式。

我是否使用任何在线工具?我用python写代码吗?任何帮助都会非常好。

我想知道上面的字符串是一种什么样的编码格式。就是这样。

【问题讨论】:

  • 您使用的是 Python 2 还是 Python 3?两个版本的字符串处理非常不同。
  • 准确地说是python 2.7.6。
  • 不,这不是任何方式的“可能重复”。在尝试公然关闭问题之前比较这两个问题。
  • 也许它甚至不是“编码”......也许它是一个从压缩/加密文件或其他东西中读取的字节数组......它足够短,从统计学上讲,它可能很难可靠地确定格式(至少明确 - 你可能会得到几个匹配项) - 16 个字节,但我可能会偏离几个......

标签: python linux string encoding decoding


【解决方案1】:

根据我的经验,enca 命令行工具非常擅长正确猜测编码:

http://linux.die.net/man/1/enca

在 Python 中,有 chardet:

https://github.com/chardet/chardet

【讨论】:

    【解决方案2】:

    我只是想了个办法,你可以把字符串解码成各种可能的编码。

    以下编码借鉴自Python's Standard Encodings

    code_list = ["ascii", "big5", "big5hkscs", "cp037", "cp424", "cp437", "cp500",
     "cp720", "cp737", "cp775", "cp850", "cp852", "cp855", "cp856", "cp857", "cp858",
     "cp860", "cp861", "cp862", "cp863", "cp864", "cp865", "cp866", "cp869", "cp874",
     "cp875", "cp932", "cp949", "cp950", "cp1006", "cp1026", "cp1140", "cp1250", "cp1251",
     "cp1252", "cp1253", "cp1254", "cp1255", "cp1256", "cp1257", "cp1258", "euc_jp",
     "euc_jis_2004", "euc_jisx0213", "euc_kr", "gb2312", "gbk", "gb18030", "hz", "iso2022_jp",
     "iso2022_jp_1", "iso2022_jp_2", "iso2022_jp_2004", "iso2022_jp_3", "iso2022_jp_ext",
     "iso2022_kr", "latin_1", "iso8859_2", "iso8859_3", "iso8859_4", "iso8859_5", "iso8859_6",
     "iso8859_7", "iso8859_8", "iso8859_9", "iso8859_10", "iso8859_13", "iso8859_14",
     "iso8859_15", "iso8859_16", "johab", "koi8_r", "koi8_u", "mac_cyrillic", "mac_greek",
     "mac_iceland", "mac_latin2", "mac_roman", "mac_turkish", "ptcp154", "shift_jis",
     "shift_jis_2004", "shift_jisx0213", "utf_32", "utf_32_be", "utf_32_le", "utf_16",
     "utf_16_be", "utf_16_le", "utf_7", "utf_8", "utf_8_sig", "idna", "mbcs", "palmos",
     "punycode", "raw_unicode_escape", "rot_13", "undefined", "unicode_escape",
     "unicode_internal", "base64_codec", "bz2_codec", "hex_codec", "quopri_codec",
     "string_escape", "uu_codec", "zlib_codec"]
    
    s = '\x86\x9cG<!\xd9F@\xb4\n\xd6\xd4(\x9cb\xfe'
    
    
    for i in code_list:
        try:
            print 'Using {0} to decode......{1:<30}'.format(i,s.decode(i).encode('utf-8'))
        except Exception as e:
    #         pass
            print e
    

    【讨论】:

    • 我试过这个,因为它看起来很合理。可悲的是,使用其中的每一个,您主要会得到无意义的字符串或异常,所以我认为@kaushaya 可能需要进一步挖掘。
    猜你喜欢
    • 2020-09-02
    • 2012-10-25
    • 2012-07-07
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2019-03-15
    相关资源
    最近更新 更多