Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.54/57: Рейтинг темы: голосов - 57, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 04.10.2014
Сообщений: 28
1

UnicodeDecodeError: 'utf8' codec can't decode byte 0x80 - invalid start byte

18.05.2015, 14:36. Показов 11937. Ответов 13
Метки нет (Все метки)

Добрый день

При вызове скрипта вылетает такая ошибка: "UnicodeDecodeError: 'utf8' codec can't decode byte 0x80 in position 3131: invalid start byte". Вылетает, как я поимаю, в этом месте. При том, что раньше он не вылетал. Файлы, которые пытаюсь открыть вроде бы точно в UTF-8 (в Sublime text 2 при выборе Reopen with UTF-8 нормально открываются). В скрипте еще используется pymorphy2, в которую скармливается нарезанный на слова файл. В чем может быть ошибка?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
dirName = sys.argv[1]
files = [ f for f in listdir(dirName) if isfile(join(dirName,f)) ]
 
for fileName in files:
    f = codecs.open(dirName + "/" + fileName , 'r' , "utf-8")
    text = f.read()
    prevPosition = 0
    position = 0
    while True:
        tmp = countStringLengthByNumberOfWordsFromPosition(text, 1000, prevPosition)
        if tmp != None:
            position += tmp
            TextAtoms.append(CountStatsForString(text[prevPosition : position], str(fileName)[:-4]))
        if abs(len(text) - prevPosition) < 1000:
            break
        else:
            prevPosition = position
    
    f.close()
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2015, 14:36
Ответы с готовыми решениями:

Ошибка Pyglet UnicodeDecodeError: 'ascii' codec can't decode
Здравствуйте. У меня у проблема с pyglet (каркас для графики и т.п.). Версия Python 2.7.3. ОС:...

'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
Работаю с библиотеками PIL и telebot В чем может быть проблема ? Ошибка - 'utf-8' codec can't...

Django - UnicodeDecodeError at /member/user_locations/ 'utf8' codec can't decode byte 0xcf in position 743
Добрый день! Во всех файлах есть: # -*- coding:utf-8 -*- models.py: from...

UnicodeDecodeError: 'utf-8' codec can't decode byte
Задача: в файле product.csv с товарами вида №;Наименование;Магазин;Стоимость, вывести информацию,...

13
2730 / 2333 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
18.05.2015, 15:00 2
YERMLV, Для начала полный текст ошибки в студию, во вторых как ты предлагаешь отлаживать это дело, когда тут происходят вызовы функций, которые мы не видим?
0
1 / 1 / 2
Регистрация: 11.02.2014
Сообщений: 97
18.05.2015, 15:01 3
Добрый день. Присоеденяюсь к вышепоставленному вопросу. При попытке записать в txt файл байт код, выдаёт ту же ошибку:

Код
Traceback (most recent call last):
  File "C:\Users\Козак Алексей\workspace\WavHabr\src\wav.py", line 6, in <module>
    f.write(content.decode('utf-8'))
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa5 in position 2: invalid start byte
мой код:
Python
1
2
3
4
5
6
7
import wave
wav=wave.open("sound.wav",mode='r')
(nchannels, sampwidth, framerate, nframes, comptype, compname) = wav.getparams()
content = wav.readframes(nframes)
f=open('qwerty.txt','w')
f.write(content.decode('utf-8'))
f.close()
Подскажите пожалуйста как исправить. Спасибо.
0
0 / 0 / 0
Регистрация: 04.10.2014
Сообщений: 28
18.05.2015, 15:07  [ТС] 4
Код ошибки
Код
Traceback (most recent call last):
  File "/Users/yermolaev/Documents/termwork/tmp/countStat.py", line 116, in <module>
    text = f.read()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/codecs.py", line 671, in read
    return self.reader.read(size)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/codecs.py", line 477, in read
    newchars, decodedbytes = self.decode(data, self.errors)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x80 in position 3131: invalid start byte
Код ф-ий
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
def CountStatsForString(string, author):
    totalCount = 0
    totalWordLength = 0.0
    words = set()
 
    POSes = {'NOUN' : 0.0, 'ADJF' : 0.0, 'ADJS' : 0.0, 'COMP' : 0.0, 'VERB' : 0.0, 'INFN' : 0.0, 'PRTF' : 0.0, 'PRTS' : 0.0, 'GRND' : 0.0, 'NUMR' : 0.0, 'ADVB' : 0.0, 'NPRO' : 0.0, 'PRED' : 0.0, 'PREP' : 0.0, 'CONJ' : 0.0, 'PRCL' : 0.0, 'INTJ' : 0.0,}
 
    if author not in AuthorsVocabulary.keys():
        AuthorsVocabulary[author] = set()
    totalSentenceNumber = float(len(re.findall(r"[.!?]+", string)))
    wordList = re.split('[., ;?:!\n\'\"]+', string)
    for word in wordList:
        if ((morph.parse(word.lower())[0]).tag.POS != None):
            POSes[(morph.parse(word)[0]).tag.POS] += 1.0
            totalCount += 1
            totalWordLength += float(len(word))
            words.add(word.lower())
            AuthorsVocabulary[author].add(word.lower())
 
    if totalCount != 0:
        for key in POSes.keys():
            POSes[key] /= (float(totalCount)/100.0)
        
        txtAtom = TextAtom(author, POSes, totalWordLength/float(totalCount), float(totalCount)/totalSentenceNumber, len(wordList))
        return txtAtom
    else:
        return None
 
def countStringLengthByNumberOfWordsFromPosition (string, numberOfWords, initPosition):
    if initPosition < len(string):
        str = string[initPosition:]
        totalLength = numberOfWords - 1
        wordList = re.split('[ ]+', str)
        j = min (numberOfWords, len(wordList))
        for i in xrange(0, min(numberOfWords, len(wordList))):
            totalLength += len(wordList[i])
        #if str[totalLength - 1] != ('.' or '!' or '?'):
        #   while j < len(wordList) - 1 and str[totalLength - 1] != ('.' or '!' or '?'):
        #       totalLength += (1 + len(wordList[j + 1]))
        #       j += 1
        return totalLength
    else:
        return None
TextAtom() – просто конструктор одноименного класса, который выполняет роль структуры
Кстати, уточню, что ОС – OS X
0
2730 / 2333 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
18.05.2015, 15:12 5
Цитата Сообщение от Козак Алексей Посмотреть сообщение
Присоеденяюсь к вышепоставленному вопросу
Ну не присоединяюсь, а новую тему создавать надо если что так, это первое.
Второе, с чего ты взял, что что-то в 6 строке нужно декодировать?
0
0 / 0 / 0
Регистрация: 04.10.2014
Сообщений: 28
18.05.2015, 15:21  [ТС] 6
На всякий случай поясню: этот кусок кода потрошит текстовый файл на куски по 1000 слов. Собирает разную статистику по каждому куску, записывает в новый объект textAtom, который добавляется в массив таких объектов
0
1 / 1 / 2
Регистрация: 11.02.2014
Сообщений: 97
18.05.2015, 15:23 7
alex925, По поводу первого: Вы же потом первый скажете что мол "поиск не используют", "одинаковые темы пачками плодят" итд. По поводу второго: метод write() хочет принимать только стринг, если сделать str.content то выдает ошибку:

Код
Traceback (most recent call last):
  File "C:\Users\Козак Алексей\workspace\WavHabr\src\wav.py", line 6, in <module>
    f.write(str.content)
AttributeError: type object 'str' has no attribute 'content'
вот я и изобретаю все подряд.
0
2730 / 2333 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
18.05.2015, 15:56 8
Козак Алексей, Одинаковые темы, это когда несколько человек из одного учебного заведения начинают заваливать форум дебильными задачами. То есть один пришёл и создал 3 темы с одной задачей, потом другой сделал тоже самое и т д В данном случае нужно создавать новую тему, а не гадить в чужой.

Цитата Сообщение от Козак Алексей Посмотреть сообщение
вот я и изобретаю все подряд.
А лучше просто включить голову.

Вот пример как происходит просто создание файла с точно таким же содержанием (как я понял ты это пытался сделать).
Python
1
2
3
4
5
6
7
8
9
10
11
import wave
 
wav = wave.open('30 Seconds To Mars - Attack.wav', mode='r')
nchannels, sampwidth, framerate, nframes, comptype, compname = wav.getparams()
 
content = wav.readframes(nframes)
 
out = wave.open('qwerty.wav', 'w')
out.setparams((nchannels, sampwidth, framerate, framerate * 183, 'NONE', 'Uncompressed'))
out.writeframes(content)
out.close()
В качестве примера брал вот этот код http://code.activestate.com/re... -wav-file/

Добавлено через 1 минуту
YERMLV, Сделай вывод в консоль тех файлов, что пытается читать программа и скинь сюда файл, на котором происходит ошибка.
1
0 / 0 / 0
Регистрация: 04.10.2014
Сообщений: 28
18.05.2015, 16:47  [ТС] 9
Не работает на всех файлах
https://drive.google.com/file/... sp=sharing вот один из них
0
2730 / 2333 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
18.05.2015, 17:05 10
YERMLV, файл без проблем открывается. Если у тебя возникает ошибка, значит файл, который ты пытаешься открыть все таки не в utf8.
0
0 / 0 / 0
Регистрация: 04.10.2014
Сообщений: 28
18.05.2015, 17:18  [ТС] 11
Все решилось. Оказывается, в папке лежала пара скрытых файлов (некий .DS_Store), который мой скрипт тоже пытался прочитать. Спасибо всем за помощь)
0
2730 / 2333 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
18.05.2015, 17:22 12
Цитата Сообщение от YERMLV Посмотреть сообщение
Оказывается, в папке лежала пара скрытых файлов (некий .DS_Store)
Ну вот, а кричал, что ВСЕ файлы не читаются.
0
0 / 0 / 0
Регистрация: 04.10.2014
Сообщений: 28
18.05.2015, 17:58  [ТС] 13
я просто методологически неправильно поступал: я оставлял по одному файлу в папке, а там в то же время оставались те скрытые файлы
0
2730 / 2333 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
18.05.2015, 18:05 14
По этому нужно или использовать вывод промежуточных результатов с помощью print или использовать отладчик.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2015, 18:05

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed
Привет всем! При компиляции скрипта в ехе вышла такая ошибка,пытался найти символ-не вышло....

При добавлении в шаблон русского текста выдаёт "'utf8' codec can't decode byte 0xf8"
Здравствуйте! При добавлении в шаблон текста на русском получаю ошибку UnicodeDecodeError at...

Invalid byte 1 of 1-byte UTF-8 sequence - ошибка (Intellij idea)
Есть небольшой проект, точнее, только зачаток, запускается нормально, но при сборке в jar ругается,...

DjangoUnicodeDecodeError: 'utf8' codec can't decode
Здравствуйте, уважаемые форумчане. Необходима помощь в решении проблемы кодировки. В заголовке...

Нельзя преобразовать тип function(a: byte;b: byte): byte к integer (Списки)
Создать список из целых чисел.Поменять в списке местами максимальный и минимальный элементы...

Восстановить string из UTF8 byte[4] с минимальными затратами
Нужна функция, которая возвращает по переданным 4 байтам строку в кодировке utf8 из заранее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.