summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Alejandro <ivanalejandro0@gmail.com>2014-01-27 14:49:59 -0300
committerIvan Alejandro <ivanalejandro0@gmail.com>2014-01-27 14:53:12 -0300
commit27a70fbbde42166c268c60e624ed11eac7788b55 (patch)
treead136bedcddee9035009d0f917eeffc3e5a64261
parent06da0dbb60d6766694ad853047ed268edd62d114 (diff)
Always return unicode, even on UnicodeError.
-rw-r--r--client/changes/bug_return-always-unicode1
-rw-r--r--client/src/leap/soledad/client/__init__.py13
2 files changed, 8 insertions, 6 deletions
diff --git a/client/changes/bug_return-always-unicode b/client/changes/bug_return-always-unicode
new file mode 100644
index 00000000..f4ee51ed
--- /dev/null
+++ b/client/changes/bug_return-always-unicode
@@ -0,0 +1 @@
+ o Always return unicode in helper method, even on UnicodeError. Related to #4998.
diff --git a/client/src/leap/soledad/client/__init__.py b/client/src/leap/soledad/client/__init__.py
index 48c703ed..3fb037c8 100644
--- a/client/src/leap/soledad/client/__init__.py
+++ b/client/src/leap/soledad/client/__init__.py
@@ -859,7 +859,7 @@ class Soledad(object):
def _convert_to_unicode(self, content):
"""
- Converts content to utf8 (or all the strings in content)
+ Converts content to unicode (or all the strings in content)
NOTE: Even though this method supports any type, it will
currently ignore contents of lists, tuple or any other
@@ -874,13 +874,14 @@ class Soledad(object):
if isinstance(content, unicode):
return content
elif isinstance(content, str):
+ result = chardet.detect(content)
+ default = "utf-8"
+ encoding = result["encoding"] or default
try:
- result = chardet.detect(content)
- default = "utf-8"
- encoding = result["encoding"] or default
content = content.decode(encoding)
- except UnicodeError:
- pass
+ except UnicodeError as e:
+ logger.error("Unicode error: {0!r}. Using 'replace'".format(e))
+ content = content.decode(encoding, 'replace')
return content
else:
if isinstance(content, dict):