浏览代码

Merge pull request #2326 from dnephin/unicode_decode_error

Unicode decode error
Daniel Nephin 10 年之前
父节点
当前提交
b09cf86dd6
共有 3 个文件被更改,包括 18 次插入2 次删除
  1. 1 1
      compose/config/config.py
  2. 1 1
      compose/utils.py
  3. 16 0
      tests/unit/utils_test.py

+ 1 - 1
compose/config/config.py

@@ -457,7 +457,7 @@ def parse_environment(environment):
 
 def split_env(env):
     if isinstance(env, six.binary_type):
-        env = env.decode('utf-8')
+        env = env.decode('utf-8', 'replace')
     if '=' in env:
         return env.split('=', 1)
     else:

+ 1 - 1
compose/utils.py

@@ -95,7 +95,7 @@ def stream_as_text(stream):
     """
     for data in stream:
         if not isinstance(data, six.text_type):
-            data = data.decode('utf-8')
+            data = data.decode('utf-8', 'replace')
         yield data
 
 

+ 16 - 0
tests/unit/utils_test.py

@@ -1,3 +1,6 @@
+# encoding: utf-8
+from __future__ import unicode_literals
+
 from .. import unittest
 from compose import utils
 
@@ -14,3 +17,16 @@ class JsonSplitterTestCase(unittest.TestCase):
             utils.json_splitter(data),
             ({'foo': 'bar'}, '{"next": "obj"}')
         )
+
+
+class StreamAsTextTestCase(unittest.TestCase):
+
+    def test_stream_with_non_utf_unicode_character(self):
+        stream = [b'\xed\xf3\xf3']
+        output, = utils.stream_as_text(stream)
+        assert output == '���'
+
+    def test_stream_with_utf_character(self):
+        stream = ['ěĝ'.encode('utf-8')]
+        output, = utils.stream_as_text(stream)
+        assert output == 'ěĝ'