2017-01-12 46 views
0

我有一個問題,與這行代碼:GSON反序列化問題有了UTF-16

try (OutputStreamWriter fileout = new OutputStreamWriter(new FileOutputStream(Paths.get(path.toString(), TAGS_FILE.toString()).toString()), "UTF-16")) { 
    fileout.write(gson.toJson(imageList, listType)); 
    fileout.flush(); 
    fileout.close(); 
} 

我使用UTF-8最初,它工作正常,加載很好,一切,卻不得不更改爲UTF-16以保留一些特殊字符。它仍然正確地寫出了文​​件,與UTF-8完全相同(除了特殊字符in-tact),但是當它試圖將文件加載到另一個會話中時,我得到「期望的BEGIN_ARRAY但是STRING ...」

有沒有辦法解決這個問題?

而且,如果這能幫助:

private final Type listType = new TypeToken<TreeSet<MyClass>>(){}.getType(); 
TreeSet<MyClass> imageList; 

UPDATE:

private void move(File file, Path destination, boolean autoTag) { 
    String fileName = file.getName(); 
    Matcher numberMatcher = leadingNumbersPattern.matcher(fileName); 

    // remove leading numbers 
    while (numberMatcher.find()) { 
     fileName = clean(fileName, leadingNumbersPattern); 
    } 

    Matcher artistMatcher = artistPattern.matcher(fileName); 
    Matcher newFileNameMatcher = newFileNamePattern.matcher(fileName); 

    if (artistMatcher.find() && newFileNameMatcher.find()) { 
     // set artist name 
     String artist = artistMatcher.group().substring(0, artistMatcher.group().length() - 1); 
     // set new picture name 
     String newFileName = newFileNameMatcher.group().substring(1); 

     Path newPath = Paths.get(destination.toString(), artist);      // path to artist folder 
     new File(newPath.toString()).mkdirs();           // make artist folder 
     newPath = Paths.get(destination.toString(), artist, newFileName);    // make path to new file location 

     try { 
      Files.move(file.toPath(), newPath, StandardCopyOption.REPLACE_EXISTING); // move file to new location 
      MyImage newImage = new MyImage(newPath.toString(), artist, newFileName); 
+2

UTF-8應該表示Unicode標準中的所有*字符。也許最好是解決原來的問題,而不是一個新問題。 – RealSkeptic

+0

那麼@RealSkeptic我遇到了泰文字符......它保存爲...不是泰語字符在json文件中。如果你有建議讓它正確地寫人物,我會非常高興。 – Kofu

+1

首先,標準json應該支持'\ uXXXX'格式的任何字符。因此,即使US-ASCII中的JSON也可以包含泰文或任何腳本中的字符。但是可以編輯你的問題並添加一個寫入文件的例子類,產生的JSON和你的期望? – RealSkeptic

回答

0

變回UTF-8固定的問題。我不得不重製json文件;我猜想,當我將所有內容最初轉換爲UTF-8時,泰國漢字都不知怎麼溜過了。編號: 找到原因了!我用來反序列化文件的load()方法沒有設置爲在FileInputStream上使用UTF-8。添加這個問題完全解決了問題。