2015-11-05 3 views
1

При выполнении подстроке, я получаю UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 8: ordinal not in range(128)UnicodeDecodeError по сравнению текста

Код:

for bhk in bed_bath: 
      if "Bedroom" in bhk.text or "Chambre à coucher" in bhk.text or "Slaapkamer" in bhk.text: 
       bhk_count += 1 

Как решить это?

Я включил ниже строки в начале моего файла.

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
+2

Вы используете Python 2 или Python 3? –

+0

Я использую Python 2.7 – user3383301

+0

Ну, ответ Гильермо Сапаты объясняет все :-) –

ответ

3

Я предполагаю, что вы используете питона 2.

Проблема происходит потому, что bhk.text является строкой Юникода.

Если вы сделаете сравнение, например "Chambre à coucher" in bhk.text, то буквальная строка, которая является строками, не относящимися к юникоду, должна быть преобразована в строку юникода.

Поскольку вы объявили, что ваш файл имеет кодировку utf-8, символ unicode à кодируется как строка "\xc3\xa0".

Когда python пытается преобразовать символ «0xc3» с использованием кодека по умолчанию (ascii), он не может сопоставить его с символом юникода и выдает эту ошибку.

Решение было бы объявить строки с не-ASCII символов, как Unicode, как:

u"Chambre à coucher" in bhk.text 
+0

У меня такая же проблема с property_price = property_price.split ('€') [1]. Как я могу решить? – user3383301

+0

Такая же проблема, '€' не является символом ascii, поэтому используйте строку unicode вместо .e.g 'property_price.split (u '€') [1]'. Обратите внимание, что добавление строкового литерала с 'u' сделает его строкой unicode, иначе это всего лишь простая строка. – memoselyk

+0

Хорошо. спасибо – user3383301