2014-02-11 3 views
1

В моем классе тестирования GSON у меня есть класс со строкой, которая должна быть сериализована.GSON - используйте символы Unicode

Проблема заключается в том, что специальные символы в Юникоде, такие как \u06A4 или , преобразуются в ?. Я не хочу, чтобы это работало.

Вот мой класс:

public final class JSONvsBinary { 

    public static final void run() throws Exception { 

     A a1 = new A(); 
     a1.a = "bla, blu., € @ xyz Ø, \u06A4 ►"; 

     GsonBuilder builder = new GsonBuilder(); 
     builder.excludeFieldsWithModifiers(Modifier.TRANSIENT); 
     builder.setPrettyPrinting(); 
     builder.disableHtmlEscaping(); 
     builder.serializeNulls(); 
     builder.serializeSpecialFloatingPointValues(); 
     Gson gson = builder.create(); 

     final String gsonString = gson.toJson(a1, A.class); 
     final byte[] gsonBytes = gsonString.getBytes("UTF8"); 
     System.out.println("GSON:\n" + new String(gsonBytes, "UTF8")); 
     System.out.println("GSON bytes: " + gsonBytes.length); 

    } 

    @SuppressWarnings("unused") 
    private static final class A { 

     public String a; 

    } 

} 

И вот результат:

GSON: 
{ 
    "a": "bla, blu., € @ xyz Ø, ? ?" 
} 
GSON bytes: 44 

Я установить кодировку байт в UTF-8, но это не работает ...

+1

Честно говоря, это не имеет ничего общего с Gson - ваш терминал не отображает эти символы правильно. Прекрасно работает на моей машине. –

+0

О, интересно. Как я могу отображать эти сообщения? Использование JOptionPanes? – MinecraftShamrock

+1

Что такое набор символов по умолчанию в вашей системе? Кажется странным, что это * не * utf-8. Разве ... это окна, и вы используете командную строку? Это prob windows-1252, который объяснил бы это. Если да, да ... или используйте IDE с консольным окном. –

ответ

3

One , убедитесь, что ваш компилятор и редактор: using the same encoding. Обычно это не проблема в среде IDE.

Проблема, вероятно, здесь: System.out.println.

От documentation for PrintStream:

Все символы, напечатанные в PrintStream преобразуются в байты, используя кодировку по умолчанию платформы.

Так, в зависимости от the platform encoding, System.out может потерять данные.

Кроме того, движок рендеринга устройства System.out отправляет данные, которые должны поддерживать графему для рендеринга каждой кодовой точки в символьных данных.

+0

Полезно знать. Спасибо. – MinecraftShamrock

Смежные вопросы