我们这里有一个加载和使用大量外部库的 JAVA 应用程序。操作系统 (Windows) 的默认编码是“windows-1252”(或“cp-1252”)。但是有一个外部库需要“utf-8”中的所有字符串(传入和传出)。我怎样才能做到这一点?如何仅更改一个 JNA 库的字符串编码类型?
最佳答案
正常的 JNA 模式是这样的:
public interface DemoLibrary extends Library {
DemoLibrary INSTANCE = Native.load("demoLibrary", DemoLibrary.class);
// abstract method declarations as interface to native library
}
但是,Native#load 被多次重载以支持自定义绑定(bind)。相关的重载是:Native#load(String, Class, Map<String,?>) .第三个参数可用于将选项传递给 native 库加载程序。这些选项可以在 com.sun.jna.Library 中找到接口(interface)。
此处的相关选项是 Library.OPTION_STRING_ENCODING
。该选项将传递给加载的 NativeLibrary
实例,并将用作此类的默认编码。
上面的例子就变成了
public interface DemoLibrary extends Library {
DemoLibrary INSTANCE = Native.load("demoLibrary", DemoLibrary.class,
Collections.singletonMap(Library.OPTION_STRING_ENCODING, "UTF-8"));
}
如果您需要自定义更多(类型映射器、调用约定),则需要在静态初始化 block 中创建选项映射。
关于java - JNA:仅更改一个外部 native 库的字符串编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62875199/