我想使用在Python 3.4中导入封面的ebooklib制作电子书。
在Python 2中,它可以正常工作:
im = open('image.jpg').read()
book.set_cover(file_name=image.jpg',content=im,create_page=True)
在Python 3.4中失败了:
UnicodeDecodeError:'utf-8'编解码器无法解码位置的字节0xff 0:无效的起始字节。
显然通过open方法读取图像不再有效,但我无法在Python3中找到如何操作。
我尝试使用编解码器模块:
im = codecs.open("image.jpg",'r', 'encoding='utf-8')
结果:TypeError:'str'不支持缓冲区接口
我尝试使用Pillow:
im=Image.open(path+'mn_epub.jpg').load()
结果:TypeError:'PixelAccess'类型的对象没有len()
我也尝试过其他各种Pillow操作,但我找不到任何可以使它工作的东西。
答案 0 :(得分:1)
该库似乎有一些unicode问题。 这是一个垫片,猴子修补图书馆,使问题消失;在脚本开头,导入库后,请包含以下代码:
from ebooklib import epub
original_get_template = epub.EpubBook.get_template
def new_get_template(*args, **kwargs):
return original_get_template(*args, **kwargs).encode(encoding='utf8')
epub.EpubBook.get_template = new_get_template
答案 1 :(得分:0)
不打算废除旧帖子,但这是我发现的与我遇到的问题有关的唯一帖子,因此我想我会将它丢给所有偶然发现此帖子的人。
在处理图像和ebooklib库时,我还有很多问题。我偶然发现了this question regarding the charmap encoder with JPEG files,。 JPEG保存为二进制文件,因此需要将其读取,因此不必调用
im = open('image.jpg').read()
您需要致电
im = open('image.jpg', 'rb').read()
这可能在Python 2和3之间发生了变化。