相关疑难解决方法(0)

UnicodeEncodeError:'charmap'编解码器无法编码 - 字符映射到<undefined>,打印功能

我正在编写一个Python(Python 3.3)程序,使用POST方法将一些数据发送到网页.主要用于调试过程我得到页面结果并使用print()函数在屏幕上显示它.

代码是这样的:

conn.request("POST", resource, params, headers)
response = conn.getresponse()
print(response.status, response.reason)
data = response.read()
print(data.decode('utf-8'));
Run Code Online (Sandbox Code Playgroud)

HTTPResponse .read()方法返回一个bytes编码页面的元素(这是一个结构良好的UTF-8文档)在我停止使用Windows的IDLE GUI并使用Windows控制台之前,这似乎没问题.返回的页面有一个U + 2014字符(em-dash),打印功能可以在Windows GUI中很好地转换(我假定代码页1252),但不在Windows控制台中(代码页850).鉴于strict默认行为,我收到以下错误:

UnicodeEncodeError: 'charmap' codec can't encode character '\u2014' in position 10248: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)

我可以使用这个非常难看的代码修复它:

print(data.decode('utf-8').encode('cp850','replace').decode('cp850'))
Run Code Online (Sandbox Code Playgroud)

现在用一个替换有问题的字符" - " ?.不是理想的情况(连字符应该是一个更好的替代品),但足够我的目的.

我的解决方案中有几件我不喜欢的东西.

  1. 所有解码,编码和解码都是丑陋的代码.
  2. 它解决了这个案例的问题.如果我使用其他编码(latin-1,cp437,返回cp1252等)为系统移植程序,它应该识别目标编码.它不是.(例如,当再次使用IDLE GUI时,emdash也会丢失,之前没有发生过)
  3. 如果将emdash翻译成连字符而不是审讯爆炸会更好.

问题不在于emdash(我可以想到解决这个问题的几种方法),但我需要编写健壮的代码.我正在向页面提供来自数据库的数据,并且数据可以返回.我可以预见到许多其他相互矛盾的情况:'Á'U+ 00c1(在我的数据库中可能)可以转换为CP-850(西欧语言的DOS/Windows控制台编码)但不能转换为CP-437(美国的编码)英语,在许多Windows instalations中是默认的).

那么,问题是:

有没有更好的解决方案使我的代码与输出接口编码无关?

python encoding encode decode

149
推荐指数
5
解决办法
31万
查看次数

Python中使用Tesseract OCR的UnicodeDecodeError

我试图使用Python中的Tesseract OCR从图像文件中提取文本,但我面临一个错误,我可以弄清楚如何处理它.所有我的环境都很好,因为我在python中使用ocr测试了一些示例图像!

这是代码

from PIL import Image
import pytesseract
strs = pytesseract.image_to_string(Image.open('binarized_image.png'))

print (strs)
Run Code Online (Sandbox Code Playgroud)

以下是我从eclipse控制台获得的错误

strs = pytesseract.image_to_string(Image.open('binarized_body.png'))
  File "C:\Python35x64\lib\site-packages\pytesseract\pytesseract.py", line 167, in image_to_string
    return f.read().strip()
  File "C:\Python35x64\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 20: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)

我在Windows10上 使用python 3.5 x64

python tesseract python-tesseract

6
推荐指数
1
解决办法
5454
查看次数

标签 统计

python ×2

decode ×1

encode ×1

encoding ×1

python-tesseract ×1

tesseract ×1