Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trouble converting to utf-8

Tags:

python

utf-8

I have the following list of strings:

['\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','\xe5\x9c\xa8\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\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\x86\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\xe6\x97\xb6\xe5\x80\x99\xef\xbc\x8c\xe5\x8f\xaa\xe6\x9c\x89\xe9\x83\xa8\xe5\x88\x86\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\x86\x85\xe6\x9f\x90\xe6\x97\xa5\xe6\x88\x96\xe6\x9c\x88\xe5\x86\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\x86\x85\xe6\x9f\x90\xe6\x97\xa5\xe6\x88\x96\xe6\x9c\x88\xe5\x86\x85\xe6\x9f\x90\xe6\x97\xa5\xe3\x80\x82']

The program keeps giving me this error:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xad in position 30: invalid start byte

I am using this piece of code to go through the list and try to convert, where new_sentences is the list:

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

I have gone through the list, but cannot find the byte that can not be converted. I know it's very long, but any help would be appreciated. Thanks.

like image 774
FlamingPickle Avatar asked Feb 24 '16 06:02

FlamingPickle


2 Answers

Your strings contain invalid bytes (\x82 for example), which make the UTF-8 untranslatable. You can ignore the invalid bytes by using

stuff = unicode(stuff, "utf8", errors="ignore")

but it would make more sense to fix the source of these invalid characters.

like image 98
Tim Pietzcker Avatar answered Sep 20 '22 22:09

Tim Pietzcker


Your strings are not valid UTF-8. Here's a script that will drill down on the problem characters. I don't know if the unicode stuff that does render makes sense, but hopefully you will

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

This gives you

---- 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'
十月一日的国庆节。
like image 28
tdelaney Avatar answered Sep 21 '22 22:09

tdelaney