java - 传递给 native 代码的字符串字节数组末尾出现乱码

标签 java string jna

我正在编写一个小程序来包装可在浏览器中使用的专有 .dll。为了实现这一点,我使用 JNA。 .dll 连接到支票扫描仪外围设备,并可以从设备内存中提取图像。

我必须使用 JNA 在 Java 中进行 Windows API 调用才能获取图像:

// DEVICE is the JNA Library interface

HANDLEByReference img = new HANDLEByReference();
File outfile = new File("my_image.bmp");

DEVICE.saveImage(img.getValue(), outfile.getName().getBytes());

当代码保存图像时,我会得到一个类似以下名称的图像:

C:\Users\user\workspace\JavaProject\bin\my_image.bmpó_¯=Pá

注意最后的乱码

在字符串上调用 getBytes() 时,Java 是否返回以 NULL 结尾的 byte[] 数组?

最佳答案

不,String.getBytes() 只是返回字符串编码形式的字节。

请注意,除非您指定编码,否则它还使用平台默认编码,并且默认可能不是您想要的。

如果您想要一个末尾带有“0”字节的数组,您可以使用:

byte[] data = outfile.getName().getBytes(encoding);
byte[] padded = new byte[data.length + 1];
System.arraycopy(data, 0, padded, 0, data.length);

关于java - 传递给 native 代码的字符串字节数组末尾出现乱码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7418411/

相关文章:

java - Java错误处理-这是执行此操作的最佳方法吗?

java - 脚本出现 'not a statement' 错误

c# - 使用混合语言(LTR + RTL)重新排列字符串?

java - java程序的运行长度编码

Java - 使用 JNA 的 Windows 任务栏 - 如何将窗口图标 (HICON) 转换为 Java 图像?

java - Spring Web 应用程序错误

c++ - 从 C++ 中的 std::string 中删除空格

java - 使用 SSPI : no errors, 进行 Kerberos 模拟但不起作用

java - 如何使 GetLastError 可靠地与 JNA 一起工作?

java - 如何在spring中设置sessionAttributes并在不同的jsps和 Controller 中访问它们