У меня есть текст, который я извлек из изображения, используя Tesseract.Когда я пытаюсь распечатать его в терминале, я получаю эту ошибку 'ascii' codec can't encode character '\xc7' in position 10: ordinal not in range(128)
в случае специальных символов (é, è, à, ç ...). Когда я записываю извлеченный текст в файл, я получаю правильный текст, включаяспециальные символы!
Вот код, который я использовал:
# -*- coding: utf-8 -*-
import cv2
import pytesseract
with open ('path_to_text_file', 'w', encoding='utf-8') as f:
try:
im = cv2.imread(path_to_image)
text = pytesseract.image_to_string(im, lang='fra')
f.write(text + '\n')
print(text)
except Exception as e:
print(e)
f.close()
Я также попытался print(str(text))
вместо print(text)
, но ничего не изменилось!
В случае, если это полезно, когда я печатаютип переменной text
(print(type(text))
), я получаю <class 'str'>
.Есть идеи, как исправить эту ошибку?
РЕДАКТИРОВАТЬ:
Пример файлов, с которыми я имею дело (Не беспокойтесь о конфиденциальности, этот пример из Интернета)
Я использую Ubuntu 18.04, python 3.6
Проект, который я запускаю, находится в Docker.
EDIT2:
Вывод, отображаемый в терминале:
'ascii' codec can't encode character '\xc9' in position 1: ordinal not in range(128)
'ascii' codec can't encode character '\xc9' in position 12: ordinal not in range(128)
'ascii' codec can't encode character '\xe9' in position 10: ordinal not in range(128)
30 | Noms BERTHIER
'ascii' codec can't encode character '\xe9' in position 2: ordinal not in range(128)
'ascii' codec can't encode character '\u2026' in position 0: ordinal not in range(128)
Sexe
Sexe: L N
3: PARIS 1ER (75)
ETES
Taie : 170
Cruise Her
| Signature
Le pol
du titulaire :
IDFRABERTHIFR<<EK<KEKKKELELEREREELEREE
88069231028S8CORINNE<<<<<<<6512068F6
Вывод, записанный в текстовый файл:
RÉPUBLIQUE FRANÇAI
RE
D'IDENTITÉ Ne: 880692310285
Nationalité Francaise
30 |Noms BERTHIER
Prénoms): CORINNE
… Néfel le: 06.12.1985
Sexe
Sexe: LN
3: PARIS 1ER (75)
ETES
Taie: 170
Cruise Her
|Подпись
Le pol
du titulaire:
IDFRABERTHIFR <88069231028S8CORINNE <<<<<<< 6512068F6 </p>
EDIT3:
Если я удаляю encoding='utf-8'
изwith open(filename, 'w') ..
Я получаю только нормальные символы;каждая строка, в которой есть специальные символы, больше не записывается в файл.Кодировка ввода / вывода Python: UTF-8. Выходные данные локали -a: C C.UTF-8 POSIX