2015-09-08 5 views
0

Здравствуйте, у меня возникла проблема с моей программой, когда дело доходит до функции диалога с файлом, которую у меня есть.UnicodeDecodeError с QFileDialog в PyQt

Сначала вот мой код:

def getFileInfo(self): 
    global logName 
    logName = QtGui.QFileDialog.getOpenFileName() 
    return logName 

def getFileName(self): 
    return logName 

def compareAction(self): 
    def process(infile, outfile, keywords): 
     keys = [[k[0], k[1], 0] for k in keywords] 
     endk = None 
     with open(infile, 'rb') as fdin: 
      with open(outfile, 'ab') as fdout: 
       fdout.write("<" + words + ">" + "\r\n") 
       for line in fdin: 
        if endk is not None: 
         fdout.write(line) 
         if line.find(endk) >= 0: 
          fdout.write("\r\n") 
          endk = None 
        else: 
         for k in keys: 
          index = line.find(k[0]) 
          if index >= 0: 
           fdout.write(line[index + len(k[0]):].lstrip()) 
           endk = k[1] 
           k[2] += 1 
     if endk is not None: 
      raise Exception(endk + "Not found before end of file") 
     return keys 
    clearOutput = open('test.txt', 'wb') 
    clearOutput.truncate() 
    clearOutput.close() 
    outputText = 'test.txt' 
    end_token = "[+][+]" 
    inputFile = logName 

    start_token = self.serialInputText.toPlainText() 
    split_start = start_token.split(' ') 
    for words in split_start: 
     process(inputFile,outputText,((words + "SHOWALL"),)) 
     fo = open(outputText, "rb") 
     text = fo.read() 

    print start_token + '\r\n' 
    print split_start 
    print inputFile 

Хорошо, Таким образом, общая идея этого куска кода захватывая некоторые введенную текст из TextEdit в моем PyQt графического интерфейса пользователя. Затем, разделив эту строку на список, который можно использовать для «scan» через файл, и если есть какие-либо соответствия, распечатайте эти соответствия в другой текстовый документ.

Шаги:

  1. пользователь вводит текст в TextEdit
  2. Тексты внутри TextEdit получает хранятся в QString
  3. Это QString имеет место в качестве разделителя, чтобы мы разделить каждую запись в списке. This is a list то есть ->[u'This', u'Is', u'A', u'List'](список имеет U-за мой код с использованием sip)
  4. Теперь, когда мы имеем эту QStringList мы можем передать ее через мою def process функции.
  5. Нам нужен файл для поиска, очевидно, здесь используются функции и def GetFileName(Self).
  6. Итак, после ввода пользователем некоторого текста, выбранного файла для поиска, он/она нажмет кнопку, позволяет называть его CompareButton и выполняет функцию def compareAction(self).

Выпуск

В настоящее время моя проблема эта ошибка, которая появляется после выполнения всех шагов он терпит неудачу на этапе № 6. Это моя ошибка:

Traceback (most recent call last): 
    File "RETRACTED.py", line 278, in compareAction 
    process(inputFile,outputText,((words + "SHOWALL"),)) 
    File "RETRACTED.py", line 260, in process 
    index = line.find(k[0]) 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128) 

Я не уверен, как почему эта ошибка происходит. Я искал аналогичную проблему, но я считаю, что она связана с моей функцией process. Я не уверен

ответ

1

что специфические ошибки:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128) 

выглядит как проблема с (непредвиденного) Byte Order Mark (BOM) в файле ввода. Я подозреваю, что файл журнала UTF-8 с спецификацией.

Попробуйте изменить файл открытой строки:

open(infile, 'rb', encoding='utf-8-sig') 

иметь спецификации маркер раздел из файла.

Смежные вопросы