diff --git a/gson/src/main/java/com/google/gson/Escaper.java b/gson/src/main/java/com/google/gson/Escaper.java index b5eef01b..89c474d9 100644 --- a/gson/src/main/java/com/google/gson/Escaper.java +++ b/gson/src/main/java/com/google/gson/Escaper.java @@ -77,7 +77,7 @@ class Escaper { int codePoint = Character.codePointAt(plainText, i); charCount = Character.charCount(codePoint); - if (!((codePoint < 0x20 || codePoint >= 0x7f) + if (!(isControlCharacter(codePoint) || mustEscapeCharInJsString(codePoint))) { continue; } @@ -103,6 +103,9 @@ class Escaper { case '\\': out.append("\\\\"); break; + case '/': + out.append("\\/"); + break; case '"': out.append('\\').append((char) codePoint); break; @@ -117,6 +120,12 @@ class Escaper { out.append(plainText, pos, len); } + private static boolean isControlCharacter(int codePoint) { + return codePoint < 0x20 + || codePoint == 0x7f + || (codePoint >= 0x80 && codePoint <= 0x9f); + } + private static void appendHexJavaScriptRepresentation(int codePoint, Appendable out) throws IOException { if (Character.isSupplementaryCodePoint(codePoint)) { diff --git a/gson/src/test/java/com/google/gson/functional/InternationalizationTest.java b/gson/src/test/java/com/google/gson/functional/InternationalizationTest.java index c1d446c9..169c37a5 100644 --- a/gson/src/test/java/com/google/gson/functional/InternationalizationTest.java +++ b/gson/src/test/java/com/google/gson/functional/InternationalizationTest.java @@ -53,7 +53,7 @@ public class InternationalizationTest extends TestCase { public void testStringsWithUnicodeChineseCharactersSerialization() throws Exception { String target = "\u597d\u597d\u597d"; String json = gson.toJson(target); - String expected = "\"\\u597d\\u597d\\u597d\""; + String expected = "\"\u597d\u597d\u597d\""; assertEquals(expected, json); }