summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbendikro <bendikro@gmail.com>2012-11-26 02:15:10 +0100
committerbendikro <bendikro@gmail.com>2012-11-26 15:54:01 +0100
commitd5e340354e46362126341020931df4606b421f20 (patch)
tree662d85d82b88044a93a5c2145b203d34ce27085b
parent60f196ff933795980e62d579da6713df7e76dc1f (diff)
downloaddeluge-d5e340354e.tar.gz
deluge-d5e340354e.tar.bz2
deluge-d5e340354e.zip
Avoid running chardet in decode_string if not needed
-rw-r--r--deluge/common.py21
1 files changed, 11 insertions, 10 deletions
diff --git a/deluge/common.py b/deluge/common.py
index 9a91531ae..ed11741bd 100644
--- a/deluge/common.py
+++ b/deluge/common.py
@@ -626,13 +626,17 @@ def decode_string(s, encoding="utf8"):
elif isinstance(s, unicode):
return s
- encodings = [(encoding, 'strict'), ("utf8", 'strict'),
- ("iso-8859-1", 'strict'),
- (chardet.detect(s)["encoding"], 'strict'),
- (chardet.detect(s)["encoding"], 'ignore')]
- for i in range(len(encodings)):
+ encodings = [lambda: ("utf8", 'strict'),
+ lambda: ("iso-8859-1", 'strict'),
+ lambda: (chardet.detect(s)["encoding"], 'strict'),
+ lambda: (chardet.detect(s)["encoding"], 'ignore')]
+
+ if not encoding is "utf8":
+ encodings.insert(0, lambda: (encoding, 'strict'))
+
+ for l in encodings:
try:
- return s.decode(encodings[i][0], encodings[i][1])
+ return s.decode(*l())
except UnicodeDecodeError:
pass
return u''
@@ -648,10 +652,7 @@ def utf8_encoded(s):
"""
if isinstance(s, str):
- try:
- s = decode_string(s).encode("utf8")
- except UnicodeEncodeError:
- log.warn("Error when encoding to utf8: %s" % s)
+ s = decode_string(s).encode("utf8")
elif isinstance(s, unicode):
s = s.encode("utf8", "ignore")
return s