我正在编写一个小程序来包装可在浏览器中使用的专有 .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/