diff --git a/addons/web_editor/models/ir_ui_view.py b/addons/web_editor/models/ir_ui_view.py
index e7fe4b3617dfecb4ea2f0af71c7b4339fe9eaa59..884e1b5a2f823908f2bfec04b8f3aacf151edfb1 100644
--- a/addons/web_editor/models/ir_ui_view.py
+++ b/addons/web_editor/models/ir_ui_view.py
@@ -343,7 +343,7 @@ class IrUiView(models.Model):
         full_snippet_key = '%s.%s' % (app_name, snippet_key)
 
         # html to xml to add '/' at the end of self closing tags like br, ...
-        xml_arch = etree.tostring(html.fromstring(arch))
+        xml_arch = etree.tostring(html.fromstring(arch), encoding='utf-8')
         new_snippet_view_values = {
             'name': name,
             'key': full_snippet_key,
diff --git a/addons/website/models/website_snippet_filter.py b/addons/website/models/website_snippet_filter.py
index 842cdfec3723f6e9355fb7c756562932f2bad401..cd7ed8eb96142a7bf1975edc387ade20093e9a84 100644
--- a/addons/website/models/website_snippet_filter.py
+++ b/addons/website/models/website_snippet_filter.py
@@ -60,7 +60,7 @@ class WebsiteSnippetFilter(models.Model):
         records = self._prepare_values(limit, search_domain)
         View = self.env['ir.ui.view'].sudo().with_context(inherit_branding=False)
         content = View._render_template(template_key, dict(records=records)).decode('utf-8')
-        return [ET.tostring(el) for el in ET.fromstring('<root>%s</root>' % content).getchildren()]
+        return [ET.tostring(el, encoding='utf-8') for el in ET.fromstring('<root>%s</root>' % content).getchildren()]
 
     def _prepare_values(self, limit=None, search_domain=None):
         """Gets the data and returns it the right format for render."""
diff --git a/odoo/addons/base/models/qweb.py b/odoo/addons/base/models/qweb.py
index ee7a5c4bd702af8b35f925f8ad76fe38db37146c..4d1009f7ad33de5ed5162ad8f219338daea910a1 100644
--- a/odoo/addons/base/models/qweb.py
+++ b/odoo/addons/base/models/qweb.py
@@ -367,7 +367,7 @@ class QWeb(object):
 
         if isinstance(document, etree._Element):
             element = document
-            document = etree.tostring(document)
+            document = etree.tostring(document, encoding='utf-8')
         elif not document.strip().startswith('<') and os.path.exists(document):
             element = etree.parse(document).getroot()
         else: