如何确定特定字符串的编码类型?

时间:2015-03-17 15:29:04

标签: python linux string encoding decoding

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

在Python中,有chardet

https://github.com/chardet/chardet

答案 1 :(得分:1)

我只想到一种方法,你可以在每种可能的编码中解码字符串。

以下编码来自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