无法转换为utf-8

时间:2016-02-24 06:39:24

标签: python utf-8

我有以下字符串列表:

  

[' \ xe8 \ XBF \ X99 \ XE6 \ X98 \ XAF \ XE4 \ XB8 \ X80 \ XE4 \ XB8 \的Xaa \ XE4 \ XBB \ XA4 \ XE4 \ XBA \ XBA \ XE6 \ XB2 \ XAE \ XE4 \ XB8 \ XA7 \ XE7 \ x9a \ X84 \ XE6 \ X97 \ xa5 \ X82'' \ XE6 \ x9c \ X89 \ XE4 \ XB8 \的Xaa \ xe5 \ xb9 \ XB4 \ xe5 \ xb9 \ XBC \ XE7 \ x9a \ X84 \ xe5 \ x9f \ xe5 \ x9c \ xa8 \ XE7 \ X82 \ x8e \ XE7 \ X82 \ x8e \ XE7 \ X83 \ X88 \ XE6 \ X97 \ xa5 \ XB8 \ x8b \ XE6 \ X99 \ X95 \ xe5 \ X80 \ X92 \ XE4 \ XBA \ 86 \ XE3 \ X80 \ X82'' \ xe8 \ X90 \ XBD \ XE6 \ X97 \ xa5 \ x8a \ x8a \ xe5 \ XA4版权所有\ xA9 \ XE7版权所有\ xA9 \ XBA \ XE6 \ x9f \ X93 \ XE6 \ X88 \ X90 \ xe9 \的x87 \ X91 \ xe8 \ X89 \ XB2 \ XE3 \ X80 \ XE6 \ X97 \ xa5 \ x8a \ x8a \ xe5 \ XA4版权所有\ xA9 \ XE7版权所有\ xA9 \ XBA \ XE6 \ x9f \ X93 \ XE6 \ X88 \ X90 \ xe9 \的x87 \ X91 \ xe8 \ X89 \ XB2 \ XE3 \ X80 \ X82'' \ XE6 \ X98 \ x9f \ XE6 \ x9c \ x9f \ XE6 \ X97 \ xa5 \ X98 \ XAF \ XE4 \ XB8 \ X80 \ xe5 \ X91 \ xa8 \ XE7 \ x9a \ X84 \ XE7 \ XAC \ XAC \ XE4 \ XB8 \ X80 \ xe5 \ XA4版权所有\ xA9 \ XE3 \ X80 \ XE6 \ x9c \ x9f \ XE6 \ X97 \ xa5 \ X98 \ XAF \ XE4 \ XB8 \ X80 \ xe5 \ X91 \ xa8 \ XE7 \ x9a \ X84 \ XE7 \ XAC \ XAC \ XE4 \ XB8 \ X80 \ xe5 \ XA4版权所有\ xA9 \ XE3 \ X80 \ X82'' \ xe5 \ x8d \ X81 \ XE6 \ x9c \ X88 \ XE4 \ XB8 \ X80 \ XE6 \ X97 \ xa5 \ X98 \ XAF \ XE4 \ XB8 \ XE7 \ x9a \ X84 \ xe5 \ x9b \ XBD \ xe5 \ XBA \ 86 \ xe8 \ x8a \ X82 \ XE3 \ X80 \ X82'' \ xe5 \ x9c \ xa8 \ XE6 \ X97 \ xa5 \ x9c \西飞\ XEF \命苦\ x8c \ XE6 \ XA3 \ X92 \ XE7 \ X90 \ X83 \ XE6 \ XAF \ X94 \ xe5 \ X85 \ XB6 \ XE4 \ XBB \ X96 \ XE4 \ XBB \ XBB \ XE4 \ XBD \ X95 \ xe8 \ XBF \ X90 \ xe5 \ x8a \ xa8 \ xe9 \ X83 \ XBD \ xe5 \ X8F \ X97 \ XE4 \ XBA \ XBA \ XE6 \ XAC \ XA2 \ xe8 \ XBF \ x8e \ XE3 \ X80 \ XE6 \ X97 \ xa5 \ x9c \ XAC \ XEF \ XBC \ x8c \ XE6 \ XA3 \ X92 \ XE7 \ X90 \ X83 \ XE6 \ XAF \ X94 \ xe5 \ X85 \ XB6 \ XE4 \ XBB \ X96 \ XE4 \ XBB \ XBB \ XE4 \ XBD \ X95 \ xe8 \ XBF \ X90 \ xe5 \ x8a \ xa8 \ xe9 \ X83 \ XBD \ xe5 \ X8F \ X97 \ XE4 \ XBA \ XBA \ XE6 \ XAC \ XA2 \ xe8 \ XBF \ x8e \ XE3 \ X80 \ X82',' \ xe8 \ XBF \ X99 \ XE6 \ X98 \ XAF \ XE6 \ XAF \ X8F \ xe5 \ XAE \ X89 \ XE6 \ X81 \ XAF \ XE6 \ X97 \ xa5 \ XBC \ x8c \ xe9 \ X99 \ XA4 \ XE6 \ X97 \ xa5 \ xe5 \ XB8 \ XB8 \ XE7 \ x9a \ X84 \ xe5 \ X85 \ xa8 \ XE7 \的x87 \ X94 \ XE7 \ xa5 \ xe5 \ xa5 \ XA0 \ XE7 \ xa5 \ XAD \ xe5 \ XA4 \ X96 \ XEF \ XBC \ x8c \ xe5 \ XBA \ X94 \ XE7 \ x8c \ XAE \ XE7 \ x9a \ X84 \ xe5 \ XAE \ X89 \ XE6 \ X81 \ XAF \ XE6 \ X97 \ xa5 \ xe5 \ X85 \ xa8 \ XE7 \的x87 \ X94 \ XE7 \ xa5 \ XAD \ XE3 \ X80 \ X82'' \ XE6 \ x9c \ X89 \ XE6 \ X97 \ XB6 \ xe5 \ X80 \ X99 \ XEF \ XBC \ x8c \ xe5 \ X8F \的Xaa \ XE6 \ x9c \ X89 \ xe9 \ X83 \ xa8 \ xe5 \ X88 \ 86 \ XE6 \ X97 \ xa5 \ XBD \ XAE \ xe8 \ XA2 \ XAB \ xe9 \ X81 \ XAE \ XE6 \ x8c \ XA1 \ XE4 \ XBD \ X8F \ XEF \ XBC \ x8c \ xe9 \ X82 \ XA3 \ xe5 \ XB0 \ XB1 \ XE4 \ XB8 \ x8d \ XE6 \ X98 \ XAF \ XE6 \ X97 \ xa5 \ xe5 \ X85 \ xa8 \ xe9 \ XA3 \ x9f \ XEF \ X BC \ x8c \ xe8 \ X80 \ x8c \ XE6 \ X98 \ XAF \ XE6 \ X97 \ xa5 \ xe5 \ X81 \ X8F \ xe9 \ XA3 \ x9f \ XE3 \ X80 \ XE6 \ X97 \ XB6 \ xe5 \ X80 \ X99 \ XEF \ XBC \ x8c \ xe5 \ X8F \的Xaa \ XE6 \ x9c \ X89 \ xe9 \ X83 \ xa8 \ xe5 \ X88 \ 86 \ XE6 \ X97 \ xa5 \ XBD \ XAE \ xe8 \ XA2 \ XAB \ xe9 \ X81 \ XAE \ XE6 \ x8c \ XA1 \ XE4 \ XBD \ X8F \ XEF \ XBC \ x8c \ xe9 \ X82 \ XA3 \ xe5 \ XB0 \ XB1 \ XE4 \ XB8 \ x8d \ XE6 \ X98 \ XAF \ XE6 \ X97 \ xa5 \ xe5 \ X85 \ xa8 \ xe9 \ XA3 \ x9f \ XEF \ XBC \ x8c \ xe8 \ X80 \ x8c \ XE6 \ X98 \ XAF \ XE6 \ X97 \ xa5 \ xe5 \ X81 \ X8F \ xe9 \ XA3 \ x9f \ XE3 \ X80 \ X82'' \ XE4 \ XBA \ x8b \ XE4 \ XBB \ XB6 \ xe5 \ X8F \ X91 \ XE7 \ X94 \ x9f \ XE6 \ X97 \ xa5 \ X8F \ XAF \ XE6 \ x8c \的x87 \ xe5 \ XAE \ x9a \ XE4 \ XB8 \ XBA \ xe5 \ X91 \ xa8 \ xe5 \ 86 \ X85 \ XE6 \ x9f \ X90 \ XE6 \ X97 \ xa5 \ XE6 \ X88 \ X96 \ XE6 \ x9c \ X88 \ xe5 \ 86 \ X85 \ XE6 \ x9f \ X90 \ XE6 \ X97 \ xa5 \ XE3 \ X80 \ XE4 \ XBB \ XB6 \ xe5 \ X8F \ X91 \ XE7 \ X94 \ x9f \ XE6 \ X97 \ xa5 \ X8F \ XAF \ XE6 \ x8c \的x87 \ xe5 \ XAE \ x9a \ XE4 \ XB8 \ XBA \ xe5 \ X91 \ xa8 \ xe5 \ 86 \ X85 \ XE6 \ x9f \ X90 \ XE6 \ X97 \ xa5 \ XE6 \ X88 \ X96 \ XE6 \ x9c \ X88 \ xe5 \ 86 \ X85 \ XE6 \ x9f \ X90 \ XE6 \ X97 \ xa5 \ XE3 \ X80 \ X82']

程序一直给我这个错误:

  

UnicodeDecodeError:' utf8'编解码器不能解码位置30中的字节0xad:无效的起始字节

我正在使用这段代码浏览列表并尝试转换,其中new_sentences是列表:

for i in range(0,len(new_sentences)):
    stuff = new_sentences[i].strip()
    stuff = unicode(stuff,"utf8")

我已经浏览了列表,但找不到无法转换的字节。我知道它很长,但任何帮助都会受到赞赏。感谢。

3 个答案:

答案 0 :(得分:6)

您的字符串包含无效字节(例如\x82),这使得UTF-8不可翻译。您可以使用

忽略无效字节
stuff = unicode(stuff, "utf8", errors="ignore")

但修复这些无效字符的来源会更有意义。

答案 1 :(得分:2)

您的字符串无效UTF-8。这是一个可以深入查看问题字符的脚本。我不知道渲染的unicode东西是否有意义,但希望你会

string_list = ['\xe8\xbf\x99\xe6\x98\xaf\xe4\xb8\x80\xe4\xb8\xaa\xe4\xbb\xa4\xe4\xba\xba\xe6\xb2\xae\xe4\xb8\xa7\xe7\x9a\x84\xe6\x97\xa5\x82',
'\xe6\x9c\x89\xe4\xb8\xaa\xe5\xb9\xb4\xe5\xb9\xbc\xe7\x9a\x84\xe5\x9f\xe5\x9c\xa8\xe7\x82\x8e\xe7\x82\x8e\xe7\x83\x88\xe6\x97\xa5\xb8\x8b\xe6\x99\x95\xe5\x80\x92\xe4\xba\x86\xe3\x80\x82',
'\xe8\x90\xbd\xe6\x97\xa5\x8a\x8a\xe5\xa4\xa9\xe7\xa9\xba\xe6\x9f\x93\xe6\x88\x90\xe9\x87\x91\xe8\x89\xb2\xe3\x80\xe6\x97\xa5\x8a\x8a\xe5\xa4\xa9\xe7\xa9\xba\xe6\x9f\x93\xe6\x88\x90\xe9\x87\x91\xe8\x89\xb2\xe3\x80\x82',
'\xe6\x98\x9f\xe6\x9c\x9f\xe6\x97\xa5\x98\xaf\xe4\xb8\x80\xe5\x91\xa8\xe7\x9a\x84\xe7\xac\xac\xe4\xb8\x80\xe5\xa4\xa9\xe3\x80\xe6\x9c\x9f\xe6\x97\xa5\x98\xaf\xe4\xb8\x80\xe5\x91\xa8\xe7\x9a\x84\xe7\xac\xac\xe4\xb8\x80\xe5\xa4\xa9\xe3\x80\x82',
'\xe5\x8d\x81\xe6\x9c\x88\xe4\xb8\x80\xe6\x97\xa5\x98\xaf\xe4\xb8\xe7\x9a\x84\xe5\x9b\xbd\xe5\xba\x86\xe8\x8a\x82\xe3\x80\x82',
]

for i, line in enumerate(string_list):
    print '---- line', i
    try:
        u = line.strip().decode('utf-8')
    except UnicodeDecodeError as e:
        print 'decode failed at', e.args[2], 'leaving', repr(line[e.args[2]:])
        u = line.strip().decode('utf-8', 'ignore')
    print u

这会给你

---- line 0
decode failed at 30 leaving '\x82'
这是一个令人沮丧的日
---- line 1
decode failed at 15 leaving '\xe5\x9f\xe5\x9c\xa8\xe7\x82\x8e\xe7\x82\x8e\xe7\x83\x88\xe6\x97\xa5\xb8\x8b\xe6\x99\x95\xe5\x80\x92\xe4\xba\x86\xe3\x80\x82'
有个年幼的在炎炎烈日晕倒了。
---- line 2
decode failed at 6 leaving '\x8a\x8a\xe5\xa4\xa9\xe7\xa9\xba\xe6\x9f\x93\xe6\x88\x90\xe9\x87\x91\xe8\x89\xb2\xe3\x80\xe6\x97\xa5\x8a\x8a\xe5\xa4\xa9\xe7\xa9\xba\xe6\x9f\x93\xe6\x88\x90\xe9\x87\x91\xe8\x89\xb2\xe3\x80\x82'
落日天空染成金色日天空染成金色。
---- line 3
decode failed at 9 leaving '\x98\xaf\xe4\xb8\x80\xe5\x91\xa8\xe7\x9a\x84\xe7\xac\xac\xe4\xb8\x80\xe5\xa4\xa9\xe3\x80\xe6\x9c\x9f\xe6\x97\xa5\x98\xaf\xe4\xb8\x80\xe5\x91\xa8\xe7\x9a\x84\xe7\xac\xac\xe4\xb8\x80\xe5\xa4\xa9\xe3\x80\x82'
星期日一周的第一天期日一周的第一天。
---- line 4
decode failed at 12 leaving '\x98\xaf\xe4\xb8\xe7\x9a\x84\xe5\x9b\xbd\xe5\xba\x86\xe8\x8a\x82\xe3\x80\x82'
十月一日的国庆节。

答案 2 :(得分:2)

从api获取数据时我遇到了这个问题。 使用python chardet来检测语言

from chardet import detect
coding = detect(line)

并且返回字符串是使用gbk编码的东西 试试

line.strip().decode('utf-8')

不适合我

但是

line.decode('gbk').encode('utf-8')

效果很好..我想问题是我们需要知道char编码的方式然后解码它..