2014-02-11 101 views
1

在我的GSON测试类中,我有一个类必须被序列化的字符串。GSON - 使用unicode字符

问题是,特殊的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

系统上的默认字符集是什么?似乎很奇怪它是* not * utf-8。除非...是这个窗口,你正在使用命令行?这是可能解释它的windows-1252的问题。如果是这样,是的......或者使用带有控制台窗口的IDE。 –

回答

3

一,确保你的编译器和编辑器是using the same encoding。这在IDE中通常不是问题。

问题可能出在这里:System.out.println

documentation for PrintStream

PrintStream印刷的所有字符被转换成使用平台的默认字符编码字节。

因此,根据the platform encoding,System.out可能会丢失数据。

最重要的是,设备System.out的渲染引擎正在发送数据,必须支持用于呈现字符数据中每个代码点的字形。

+0

很高兴知道。谢谢。 – MinecraftShamrock