diff --git a/resources/content_server/browse/browse.html b/resources/content_server/browse/browse.html
index e1e4cd47f5..cd556b87a4 100644
--- a/resources/content_server/browse/browse.html
+++ b/resources/content_server/browse/browse.html
@@ -76,7 +76,7 @@
-
-
diff --git a/src/calibre/library/server/mobile.py b/src/calibre/library/server/mobile.py
index 856363d7db..b9ca24a823 100644
--- a/src/calibre/library/server/mobile.py
+++ b/src/calibre/library/server/mobile.py
@@ -17,7 +17,7 @@ from calibre.library.server import custom_fields_to_display
from calibre.library.server.utils import strftime, format_tag_string
from calibre.ebooks.metadata import fmt_sidx
from calibre.constants import __appname__
-from calibre import human_readable
+from calibre import human_readable, isbytestring
from calibre.utils.date import utcfromtimestamp
from calibre.utils.filenames import ascii_filename
@@ -29,6 +29,8 @@ def CLASS(*args, **kwargs): # class is a reserved word in Python
def build_search_box(num, search, sort, order): # {{{
div = DIV(id='search_box')
form = FORM('Show ', method='get', action='mobile')
+ form.set('accept-charset', 'UTF-8')
+
div.append(form)
num_select = SELECT(name='num')
@@ -193,6 +195,8 @@ class MobileServer(object):
raise cherrypy.HTTPError(400, 'num: %s is not an integer'%num)
if not search:
search = ''
+ if isbytestring(search):
+ search = search.decode('UTF-8')
ids = self.db.search_getting_ids(search.strip(), self.search_restriction)
FM = self.db.FIELD_MAP
items = [r for r in iter(self.db) if r[FM['id']] in ids]
diff --git a/src/calibre/library/server/xml.py b/src/calibre/library/server/xml.py
index 469d2457e7..e99fc2839c 100644
--- a/src/calibre/library/server/xml.py
+++ b/src/calibre/library/server/xml.py
@@ -49,6 +49,8 @@ class XMLServer(object):
if not search:
search = ''
+ if isbytestring(search):
+ search = search.decode('UTF-8')
ids = self.db.search_getting_ids(search.strip(), self.search_restriction)