對於NetBeans插件我想用特定的字符串和特定字符集更改文件(在NetBeans編輯器中打開)的內容。爲了達到這個目的,我用EditorCookie打開文件(一個DataObject),然後通過向我的數據對象的StyledDocument插入一個不同的字符串來更改內容。如何使用特定字符集寫入StyledDocument?
但是,我有一種感覺,該文件始終保存爲UTF-8。即使我在文件中寫入文件標記。難道我做錯了什麼?
這是我的代碼:
...
EditorCookie cookie = dataObject.getLookup().lookup(EditorCookie.class);
String utf16be = new String("\uFEFFHello World!".getBytes(StandardCharsets.UTF_16BE));
NbDocument.runAtomic(cookie.getDocument(),() -> {
try {
StyledDocument document = cookie.openDocument();
document.remove(0, document.getLength());
document.insertString(0, utf16be, null);
cookie.saveDocument();
} catch (BadLocationException | IOException ex) {
Exceptions.printStackTrace(ex);
}
});
我也嘗試過這種做法不工作過:
...
EditorCookie cookie = dataObject.getLookup().lookup(EditorCookie.class);
NbDocument.runAtomic(cookie.getDocument(),() -> {
try {
StyledDocument doc = cookie.openDocument();
String utf16be = "\uFEFFHello World!";
InputStream is = new ByteArrayInputStream(utf16be.getBytes(StandardCharsets.UTF_16BE));
FileObject fileObject = dataObject.getPrimaryFile();
String mimePath = fileObject.getMIMEType();
Lookup lookup = MimeLookup.getLookup(MimePath.parse(mimePath));
EditorKit kit = lookup.lookup(EditorKit.class);
try {
kit.read(is, doc, doc.getLength());
} catch (IOException | BadLocationException ex) {
Exceptions.printStackTrace(ex);
} finally {
is.close();
}
cookie.saveDocument();
} catch (Exception ex) {
Exceptions.printStackTrace(ex);
}
});
謝謝你的解釋!但是,如果我使用'insertString',那麼JRE的默認編碼會被採用,對吧?所以也許我應該修改'EditorKit'來查看是否可以改變'EditorKit'使用的'Reader'的編碼。 – 2014-11-23 19:02:15
不確定;你有沒有試過只是插入字符串?另外,爲什麼BOM在一開始? – fge 2014-11-23 19:06:18
我試圖插入字符串,因爲它是。看起來不錯,但如果我在另一個編輯器中打開該文件而不是NetBeans,那麼此編輯器無法將該文件識別爲UTF-16-BE。這就是爲什麼我要在開始時編寫BOM,以便其他編輯可以輕鬆檢測到我保存的文件的字符集。 – 2014-11-23 19:12:50