1.1 --- a/encoders.py Mon Jan 09 23:02:52 2017 +0100
1.2 +++ b/encoders.py Tue Jan 10 18:21:00 2017 +0100
1.3 @@ -337,7 +337,19 @@
1.4 if isinstance(value, (int, float)):
1.5 return str(value)
1.6 else:
1.7 - return '"%s"' % str(value).replace('"', '\\"').replace("\n", "\\n").replace("\t", "\\t").replace("\r", "\\r")
1.8 + l = []
1.9 +
1.10 + # Encode characters including non-ASCII ones.
1.11 +
1.12 + for c in str(value):
1.13 + if c == '"': l.append('\\"')
1.14 + elif c == '\n': l.append('\\n')
1.15 + elif c == '\t': l.append('\\t')
1.16 + elif c == '\r': l.append('\\r')
1.17 + elif 0x20 <= ord(c) < 0x80: l.append(c)
1.18 + else: l.append("\\x%02x" % ord(c))
1.19 +
1.20 + return '"%s"' % "".join(l)
1.21
1.22 def encode_literal_data_initialiser(style):
1.23