Add locale_decode util function that decodes bytestrings using the current locale's encoding

This commit is contained in:
Stein Magnus Jodal 2012-08-10 23:12:04 +02:00
parent ca706ae978
commit 0e66ffe6a5
2 changed files with 45 additions and 0 deletions

View File

@ -1,3 +1,4 @@
import locale
import logging
import os
import sys
@ -29,3 +30,9 @@ def get_class(name):
except (ImportError, AttributeError):
raise ImportError("Couldn't load: %s" % name)
return class_object
def locale_decode(bytestr):
try:
return unicode(bytestr)
except UnicodeError:
return str(bytestr).decode(locale.getpreferredencoding())

View File

@ -0,0 +1,38 @@
import mock
from mopidy.utils import locale_decode
from tests import unittest
@mock.patch('mopidy.utils.locale.getpreferredencoding')
class LocaleDecodeTest(unittest.TestCase):
def test_can_decode_utf8_strings_with_french_content(self, mock):
mock.return_value = 'UTF-8'
result = locale_decode(
'[Errno 98] Adresse d\xc3\xa9j\xc3\xa0 utilis\xc3\xa9e')
self.assertEquals(u'[Errno 98] Adresse d\xe9j\xe0 utilis\xe9e', result)
def test_can_decode_an_ioerror_with_french_content(self, mock):
mock.return_value = 'UTF-8'
error = IOError(98, 'Adresse d\xc3\xa9j\xc3\xa0 utilis\xc3\xa9e')
result = locale_decode(error)
self.assertEquals(u'[Errno 98] Adresse d\xe9j\xe0 utilis\xe9e', result)
def test_does_not_use_locale_to_decode_unicode_strings(self, mock):
mock.return_value = 'UTF-8'
locale_decode(u'abc')
self.assertFalse(mock.called)
def test_does_not_use_locale_to_decode_ascii_bytestrings(self, mock):
mock.return_value = 'UTF-8'
locale_decode('abc')
self.assertFalse(mock.called)