How to fix: “UnicodeDecodeError: 'ascii' codec can't decode byte”

前端 未结 19 1577
谎友^
谎友^ 2020-11-22 01:21
as3:~/ngokevin-site# nano content/blog/20140114_test-chinese.mkd
as3:~/ngokevin-site# wok
Traceback (most recent call last):
File \"/usr/local/bin/wok\", line 4, in
         


        
相关标签:
19条回答
  • 2020-11-22 02:09

    Encode converts a unicode object in to a string object. I think you are trying to encode a string object. first convert your result into unicode object and then encode that unicode object into 'utf-8'. for example

        result = yourFunction()
        result.decode().encode('utf-8')
    
    0 讨论(0)
  • 2020-11-22 02:10

    In a Django (1.9.10)/Python 2.7.5 project I have frequent UnicodeDecodeError exceptions; mainly when I try to feed unicode strings to logging. I made a helper function for arbitrary objects to basically format to 8-bit ascii strings and replacing any characters not in the table to '?'. I think it's not the best solution but since the default encoding is ascii (and i don't want to change it) it will do:

    def encode_for_logging(c, encoding='ascii'):
        if isinstance(c, basestring):
            return c.encode(encoding, 'replace')
        elif isinstance(c, Iterable):
            c_ = []
            for v in c:
                c_.append(encode_for_logging(v, encoding))
            return c_
        else:
            return encode_for_logging(unicode(c))
    
    `

    0 讨论(0)
  • 2020-11-22 02:12

    I had the same error, with URLs containing non-ascii chars (bytes with values > 128), my solution:

    url = url.decode('utf8').encode('utf-8')
    

    Note: utf-8, utf8 are simply aliases . Using only 'utf8' or 'utf-8' should work in the same way

    In my case, worked for me, in Python 2.7, I suppose this assignment changed 'something' in the str internal representation--i.e., it forces the right decoding of the backed byte sequence in url and finally puts the string into a utf-8 str with all the magic in the right place. Unicode in Python is black magic for me. Hope useful

    0 讨论(0)
  • 2020-11-22 02:13
    "UnicodeDecodeError: 'ascii' codec can't decode byte"
    

    Cause of this error: input_string must be unicode but str was given

    "TypeError: Decoding Unicode is not supported"
    

    Cause of this error: trying to convert unicode input_string into unicode


    So first check that your input_string is str and convert to unicode if necessary:

    if isinstance(input_string, str):
       input_string = unicode(input_string, 'utf-8')
    

    Secondly, the above just changes the type but does not remove non ascii characters. If you want to remove non-ascii characters:

    if isinstance(input_string, str):
       input_string = input_string.decode('ascii', 'ignore').encode('ascii') #note: this removes the character and encodes back to string.
    
    elif isinstance(input_string, unicode):
       input_string = input_string.encode('ascii', 'ignore')
    
    0 讨论(0)
  • 2020-11-22 02:17

    I got the same problem with the string "Pastelería Mallorca" and I solved with:

    unicode("Pastelería Mallorca", 'latin-1')
    
    0 讨论(0)
  • 2020-11-22 02:18

    I was searching to solve the following error message:

    unicodedecodeerror: 'ascii' codec can't decode byte 0xe2 in position 5454: ordinal not in range(128)

    I finally got it fixed by specifying 'encoding':

    f = open('../glove/glove.6B.100d.txt', encoding="utf-8")
    

    Wish it could help you too.

    0 讨论(0)
提交回复
热议问题