gpt4 book ai didi

java - 如何写入具有特定字符集的 StyledDocument?

转载 作者:行者123 更新时间:2023-11-30 11:12:03 25 4
gpt4 key购买 nike

对于 NetBeans 插件,我想更改具有特定字符串和特定字符集的文件(在 NetBeans 编辑器中打开)的内容。为了实现这一点,我使用 EditorCookie 打开文件(数据对象),然后通过将不同的字符串插入数据对象的 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);
}
});

最佳答案

您的问题可能出在这里:

String utf16be = new String("\uFEFFHello World!".getBytes(StandardCharsets.UTF_16BE));

这不会像您认为的那样。这将使用 UTF-16 little endian 编码将您的字符串转换为字节数组,然后使用 JRE 的默认编码从这些字节创建一个 String

所以,这里是陷阱:

String 没有编码。

在 Java 中这是一个 char 序列这一事实并不重要。用“char”代替“信鸽”,净效果是一样的。

如果你想用给定的编码将一个String写入一个字节流,你需要在你创建的Writer对象上指定你需要的编码。同样,如果您想使用给定的编码将字节流读入 String,您需要配置 Reader 以使用您想要的编码。

但是您的StyledDocument 对象的方法名称是.insertString();您应该 .insertString() 您的 String 对象原样;不要按照您的方式转换它,因为这是错误的,如上所述。

关于java - 如何写入具有特定字符集的 StyledDocument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27092231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com