Ошибка UnicodeDecodeError: кодек ‘ascii’ не может декодировать байт 0xe2 в позиции 46: порядковый номер не в диапазоне

#python

#python

Вопрос:

Я знаю, что вокруг много ошибок UnicodeDecodeError, но я не могу найти никого, кто объяснил бы мою проблему.. И эта ошибка случайным образом выскочила из среды, которую я не могу воспроизвести..

Я хочу просто сравнить две строки байт в байт (я не хочу никакого кодирования и декодирования).

Обратите внимание, что я использую python2.7, а str1 — из open(‘..’, ‘r’).read() в linux.

Надеюсь на ваши советы..

   def diff_str(str1, str2):
      minlen = min(len(str1), len(str2))
      if str1 == str2:
        return "All %d bytes same" %minlen

      for diff_pos in xrange(minlen):
        if str1[diff_pos] != str2[diff_pos]:
          break

      k = 100

      to_ret = "(%d vs %d) charsn" % (len(str1), len(str2))
      to_ret  = "diff starts at %d:n" % diff_pos
      # error jumps out at here..
      to_ret  = str1[diff_pos:diff_pos k]   "n"
      to_ret  = str2[diff_pos:diff_pos k]   "n"
    return to_ret
  

Ответ №1:

Во-первых, пожалуйста, вставьте вашу строку (или файл), которую вы хотите сравнить, и исправьте ошибки.

Попробуйте:

 for uchar in your_string.decode('utf-8'):
    # compare chars
  

Вам нужно двоичное сравнение? Тогда попробуйте:

 oneBuf = bytes(yourfile.read(1024))
  

Затем сравните буферы байтов.