do not check identifiers for decodability
authorStefan Behnel <scoder@users.berlios.de>
Sun, 11 Oct 2009 08:38:53 +0000 (10:38 +0200)
committerStefan Behnel <scoder@users.berlios.de>
Sun, 11 Oct 2009 08:38:53 +0000 (10:38 +0200)
Cython/Compiler/ExprNodes.py

index ff0ad0673c6d08aba65f14713d7db31d4dd219dd..20d543918d64b37b859d5fec4e35131c130f3378 100644 (file)
@@ -903,7 +903,7 @@ class StringNode(PyConstNode):
     # A Python str object, i.e. a byte string in Python 2.x and a
     # unicode string in Python 3.x
     #
-    # value          BytesLiteral
+    # value          BytesLiteral or EncodedString
     # is_identifier  boolean
 
     type = Builtin.str_type
@@ -919,11 +919,12 @@ class StringNode(PyConstNode):
             self.check_for_coercion_error(dst_type, fail=True)
 
         # this will be a unicode string in Py3, so make sure we can decode it
-        encoding = self.value.encoding or 'UTF-8'
-        try:
-            self.value.decode(encoding)
-        except UnicodeDecodeError:
-            error(self.pos, "String decoding as '%s' failed. Consider using a byte string or unicode string explicitly, or adjust the source code encoding." % encoding)
+        if not self.is_identifier:
+            encoding = self.value.encoding or 'UTF-8'
+            try:
+                self.value.decode(encoding)
+            except UnicodeDecodeError:
+                error(self.pos, "String decoding as '%s' failed. Consider using a byte string or unicode string explicitly, or adjust the source code encoding." % encoding)
 
         return self