diff --git a/minijson.pyx b/minijson.pyx
index b6f5aa659b6b77b7c176f9e931b39204a9874788..bc80cdb339f2f309b98c0006add03796dd5b122c 100644
--- a/minijson.pyx
+++ b/minijson.pyx
@@ -517,8 +517,9 @@ cdef class MiniJSONEncoder:
                     data.sort()  # sort implicitly will sort it by first value, which is the key
 
                 for field_name, elem in data:
-                    cio.write(bytearray([len(field_name)]))
-                    cio.write(field_name.encode('utf-8'))
+                    b_data = field_name.encode('utf-8')
+                    cio.write(bytearray([len(b_data)]))
+                    cio.write(b_data)
                     length += self.dump(elem, cio)
                 return length
             else:
diff --git a/tests/test_minijson.py b/tests/test_minijson.py
index de288d6906b999139b5269736ae74f22a066edd8..526b7e256a188086a9c95047bd28ac3144c57c6a 100644
--- a/tests/test_minijson.py
+++ b/tests/test_minijson.py
@@ -137,6 +137,9 @@ class TestMiniJSON(unittest.TestCase):
         self.assertSameAfterDumpsAndLoads({i: i for i in range(300)})
         self.assertSameAfterDumpsAndLoads({i: i for i in range(66000)})
 
+    def test_smok_bug_case_2(self):
+        self.assertSameAfterDumpsAndLoads({"zażółć gęślą jaźń": "zażółć gęślą jaźń"})
+
     def test_invalid_name_dict(self):
         self.assertLoadingIsDecodingError(b'\x15\x01\x81\x01')
         self.assertLoadingIsDecodingError(b'\x0B\x01\x01\xFF\x15')