diff --git a/addons/web_editor/models/ir_ui_view.py b/addons/web_editor/models/ir_ui_view.py
index 13b369cb50b..52bab6a98dd 100644
--- a/addons/web_editor/models/ir_ui_view.py
+++ b/addons/web_editor/models/ir_ui_view.py
@@ -335,7 +335,7 @@ class IrUiView(models.Model):
name = self._find_available_name(name, used_names)
# 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 f38ff6f34f5..56e407298f9 100644
--- a/addons/website/models/website_snippet_filter.py
+++ b/addons/website/models/website_snippet_filter.py
@@ -71,7 +71,7 @@ class WebsiteSnippetFilter(models.Model):
is_sample=is_sample,
to_generic=self._to_generic,
)).decode('utf-8')
- return [ET.tostring(el) for el in ET.fromstring('%s' % content).getchildren()]
+ return [ET.tostring(el, encoding='utf-8') for el in ET.fromstring('%s' % 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 b558b4ebc9b..fe5af5edf1a 100644
--- a/odoo/addons/base/models/qweb.py
+++ b/odoo/addons/base/models/qweb.py
@@ -372,7 +372,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: