Fix #7029 (Error while sending book to e-mail)

This commit is contained in:
Kovid Goyal 2010-10-02 12:30:30 -06:00
parent 20dedaac5c
commit 3e6cc2042b
2 changed files with 22 additions and 4 deletions

View File

@ -455,6 +455,24 @@ def prepare_string_for_xml(raw, attribute=False):
def isbytestring(obj):
return isinstance(obj, (str, bytes))
def force_unicode(obj, enc=preferred_encoding):
if isbytestring(obj):
try:
obj = obj.decode(enc)
except:
try:
obj = obj.decode(filesystem_encoding if enc ==
preferred_encoding else preferred_encoding)
except:
try:
obj = obj.decode('utf-8')
except:
obj = repr(obj)
if isbytestring(obj):
obj = obj.decode('utf-8')
return obj
def human_readable(size):
""" Convert a size in bytes into a human readable form """
divisor, suffix = 1, "B"

View File

@ -23,7 +23,7 @@ from calibre.gui2 import config, error_dialog, Dispatcher, dynamic, \
warning_dialog, \
question_dialog, info_dialog, choose_dir
from calibre.ebooks.metadata import authors_to_string
from calibre import preferred_encoding, prints
from calibre import preferred_encoding, prints, force_unicode
from calibre.utils.filenames import ascii_filename
from calibre.devices.errors import FreeSpaceError
from calibre.utils.smtp import compose_mail, sendmail, extract_email_address, \
@ -964,12 +964,12 @@ class DeviceMixin(object): # {{{
for jobname, exception, tb in results:
title = jobname.partition(':')[-1]
if exception is not None:
errors.append([title, exception, tb])
errors.append(list(map(force_unicode, [title, exception, tb])))
else:
good.append(title)
if errors:
errors = '\n'.join([
'%s\n\n%s\n%s\n' %
errors = u'\n'.join([
u'%s\n\n%s\n%s\n' %
(title, e, tb) for \
title, e, tb in errors
])