【发布时间】:2019-07-13 00:44:48
【问题描述】:
我有一个使用 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
输出写入文本文件:
法国共和国
重新
D'IDENTITÉ Ne : 880692310285
法兰西民族
30 |名词 BERTHIER
Prénoms): CORINNE
… Néfel le: 06.12.1985
性
性别:L N
3:巴黎 1ER (75)
ETES
太乙:170
巡航她
|签名
波尔
职称 :
IDFRABERTHIFR
EDIT3:
如果我从with open(filename, 'w') .. 中删除encoding='utf-8',我只会得到普通字符;有特殊字符的每一行都不再写入文件。
python i/o 编码是 utf-8
locale -a 的输出是 C C.UTF-8 POSIX
【问题讨论】:
-
您在 Windows 上吗?什么是 Python 的 I/O 编码以及您的系统设置使用什么代码页?另请参阅the Stack Overflow
character-encodingtag info page,了解有关如何提出更明确的问题的疑难解答提示和建议 -
编辑根本没有帮助。您尝试输出的 text 很有趣(Python 尝试输出的实际 Unicode 或字节)。
-
哦!抱歉,我没听懂,我会再次编辑问题,添加写入文件的输出和终端中显示的输出
-
locale的输出,可能会被精简以省略冗余信息(我们不关心排序顺序或货币设置,所以实际上可能只是LC_CTYPE和LANG以及可能是 @987654338 @如果它不同于LC_CTYPE) -
不是
locale -a,只是locale。如果您的语言环境是C或POSIX,请尝试将其设置为C.UTF-8。
标签: python-3.x docker encoding character-encoding python-3.6