Fix UTF-8 support on Python 2 (#740)
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index fecfdd1..c1c6f2c 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -150,10 +150,18 @@
     matched_namemasks = set()
     protoc_insertion_points = False
 
-# String types (for python 2 / python 3 compatibility)
-try:
+# String types and file encoding for Python2 UTF-8 support
+if sys.version_info.major == 2:
+    import codecs
+    open = codecs.open
     strtypes = (unicode, str)
-except NameError:
+
+    def str(x):
+        try:
+            return strtypes[1](x)
+        except UnicodeEncodeError:
+            return strtypes[0](x)
+else:
     strtypes = (str, )
 
 
diff --git a/tests/site_scons/site_init.py b/tests/site_scons/site_init.py
index d19bc20..1f52b83 100644
--- a/tests/site_scons/site_init.py
+++ b/tests/site_scons/site_init.py
@@ -22,6 +22,11 @@
 except ImportError:
     pass
 
+# UTF-8 support on Python 2
+if sys.version_info.major == 2:
+    import codecs
+    open = codecs.open
+
 def add_nanopb_builders(env):
     '''Add the necessary builder commands for nanopb tests.'''