2017-05-22 3 views
2

Ich habe Map<String, String> das später möchte ich mit Gson zu JSON serialisieren. Einige Schlüssel dieser Karte enthalten Unicode-Zeichen wie \uf177 usw. Das Problem erscheint, wenn ich versuche, eine solche Karte zu JSON serialisiert werden, lassen Sie uns sagen, ich habe Map<String, String> enthält:Verhindern, dass Gson Unicode-Symbole entgeht

"TEST_KEY" -> "\uf177" 

dann, wenn mit Gson serialisiert, ich habe :

{ 
    "TEST_KEY": "\\uf177" 
} 

welche nicht das, was ich will, ist, ich diese Unicode-Zeichen sein wollen wie sie, wenn serialisiert werden. Gibt es einen Weg, dies zu erreichen? schätzen würde jede mögliche Hilfe,

UPDATE

-Code, der die Frage stellt:

 projectI18nFileContent = commentsRemover.transform(projectI18nFileContent); 

     //find json map which represents translations 
     Matcher fullTranslationsMapMatcher = translationsMapSerializedToJsonPattern.matcher(projectI18nFileContent); 

     if (!fullTranslationsMapMatcher.find()) { 
      throw new IllegalArgumentException(format("%s \n does not contain valid translations json map", projectI18nFileContent)); 
     } 

     String translationsMapSerializedToJson = fullTranslationsMapMatcher.group(); 
     String newTranslationsMapSerializedToJson = gson.toJson(newTranslations); 

     //replace old json translations map with a new 
     return projectI18nFileContent.replace(translationsMapSerializedToJson, newTranslationsMapSerializedToJson); 

Dieses Stück Code gewidmet Inhalt von i18n-Datei für JavaScript-Projekt zu ändern, das ist der Grund, warum Unicode sollte nicht maskiert werden (sonst ist es gerade nicht richtig gelöst)

Danke, Cheers

+0

Ja: Wenn es die 6-stellige Zeichenfolge ist, dann ist die richtige Schreibweise "\\ uf177". Also ist das Verhalten von gson normal. –

+0

Können Sie etwas mehr Code zeigen? Es sieht so aus, als hättest du eine Zeichenkette mit den Zeichen "\ uf177" und nicht irgendein Unicode-Zeichen. – JeremyP

+0

@ JeremyP hat ein bisschen mehr Code hinzugefügt, danke! –

Antwort

3

Gemäß Json spec müssen die Backslashes maskiert werden.

Also sollten Sie nicht versuchen, dies zu verhindern. Es ist korrektes Verhalten.

+0

Der Java-Compiler hätte das '\ uF177' in das Zeichen, das es darstellt, übersetzt, also ist das nicht wirklich die richtige Antwort. – JeremyP

+0

@JeremyP hast du die JSON Spezifikation von der Verbindung gelesen? vor allem dieser Teil http://json.org/string.gif –

+0

'\ uf177' ist ein * single * Unicode-Code-Zeichen. Es sollte den obersten Pfad in Ihrem Diagramm durchlaufen haben. Wenn der Java-Compiler die Sequenz '\ uXXXX' sieht, wobei XXXX eine hexadezimale Zeichenfolge ist, wird diese sechsstellige Zeichenfolge durch das einzelne Unicode-Zeichen ersetzt, das sie darstellt. – JeremyP

Verwandte Themen