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);
UTF-8應該表示Unicode標準中的所有*字符。也許最好是解決原來的問題,而不是一個新問題。 – RealSkeptic
那麼@RealSkeptic我遇到了泰文字符......它保存爲...不是泰語字符在json文件中。如果你有建議讓它正確地寫人物,我會非常高興。 – Kofu
首先,標準json應該支持'\ uXXXX'格式的任何字符。因此,即使US-ASCII中的JSON也可以包含泰文或任何腳本中的字符。但是可以編輯你的問題並添加一個寫入文件的例子類,產生的JSON和你的期望? – RealSkeptic