`

JNA正确转换字符串编码

 
阅读更多
c里面没有原生字符串,Windows下的LPCTSTR实际上是一个字节数组指针,JNA进行LPCSTR -> String映射的时候会先将LPCSTR映射为byte[],再根据系统属性"jna.encoding"的值返回new String(byte[],jna.encoding),反之亦然。

当"jna.encoding"为null时Java会以默认的UTF-8进行编码,如果这个本地库是非Unicode的就会产生乱码。

要避免乱码,在应用启动时加一个
System.setProperty("jna.encoding", stringEncoding);

即可,在简体中文Windows下stringEncoding为GBK。
分享到:
评论
4 楼 ceoshun 2017-07-28  
   谢谢!
3 楼 shanyejunjie 2015-02-13  
  顶!!
2 楼 ve7ev 2014-10-14  
    这个方法很管用
1 楼 clarkamx 2013-08-06  
这个方法很管用!

相关推荐

    JNA 转java接口以及指针结构体解析

    例如,如果你要调用一个接受整数和返回字符串的C函数,那么Java接口可以这样定义: ```java public interface NativeLibrary extends Library { String nativeFunction(int input); } ``` 接下来,我们需要配置...

    (002)Jna转换器(可运行)

    【注意】这是一款JNA转换器源码(能使用运行) JNA类库使用一个很小的本地类库sub 动态的调用本地代码。程序员只需要使用一个特定的java接口描述一下将要调用的本地代码的方法的结构和一些基本属性。这样就省了为了...

    jna.rar_java 串口_jna_串口_串口调试

    在“jna.rar”这个压缩包中,包含了一份“开源项目JNA-中文翻译版.pdf”,这应该是对JNA库的详细中文文档,帮助开发者理解如何使用JNA进行串口通信。 JNA的工作原理是通过动态链接库(DLL on Windows,dylib on ...

    C++头文件转JAVA JNA接口类

    本篇文章将详细介绍如何将C++的头文件转换为Java的JNA接口类,以便于Java程序调用C++ DLL中的接口。 首先,我们需要理解JNA的工作原理。JNA通过定义Java接口来映射C/C++函数,并在运行时动态加载本地库,实现调用。...

    Jna调用dll实例

    JNA默认使用系统的默认编码,如果DLL期望的是其他编码(比如GBK),你需要在传递参数前进行编码转换。例如: ```java String chineseStr = "中文字符串"; byte[] bytes = chineseStr.getBytes("GBK"); // 转换为GBK...

    jna.rar_jna_jna.jar_jna文件

    JNA的工作原理主要基于两个关键概念:接口映射(Interface Mapping)和类型转换(Type Mapping)。接口映射允许开发者定义Java接口来代表本地函数,而类型映射则处理Java数据类型和本地数据类型的转换,确保调用的...

    jna整合包-jna4.5.0+jna4.0.0.rar

    在你提供的压缩包"jna整合包-jna4.5.0+jna4.0.0.rar"中,包含了两个版本的JNA库:jna-4.0.0.jar和jna-4.5.0.jar。这两个版本的差异主要体现在功能的完善和性能的优化上。JNA 4.5.0是较新的版本,相比4.0.0,它可能...

    jna-3.3.0 & jna-3.3.0-platform

    - JNA支持多种数据类型转换,包括基本类型(如int、double等)、复杂类型(如结构体、数组)以及自定义Java类。 2. **JNA平台库(jna-3.3.0-platform.jar)** - 平台库包含了特定于操作系统的类型定义和功能接口...

    jna 小例子

    Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码直接调用操作系统API,无需编写JNI(Java Native Interface)代码。这个“jna小例子”可能是一个示例项目,展示了如何使用JNA与C或C++编写的DLL...

    JNA(java和vc++之间调用)

    Java Native Access (JNA) 是一个Java库,它允许Java代码与本地平台API无缝交互,无需编写...不过,需要注意的是,虽然JNA简化了跨语言调用的过程,但仍然需要对C/C++的API有一定的了解,以正确地映射函数和数据类型。

    JNA 4.1.0 官方版

    通过研究源码,开发者可以更好地理解JNA如何处理内存管理、类型转换和错误处理,从而在使用时更加得心应手。 JNA的工作原理是通过动态加载动态链接库(DLL on Windows,.so on Linux,dylib on Mac OS X),并将...

    jna3.2.1.rar

    它可以表示任何类型的数据,包括字符串、结构体、数组等。 5. **Platform类**:`com.sun.jna.Platform`类提供了识别运行时操作系统的功能,根据不同的平台加载相应的本地库。 6. **Memory管理**:JNA处理内存分配...

    JNA实例 JNA实例 JNA实例

    - `say`: 该函数用于输出传入的字符串。 - `sayUser`: 该函数用于输出`UserStruct`结构体中的信息。 - `sayCompany` 和 `sayCompany2`: 这两个函数分别用于输出`CompanyStruct`和`CompanyStruct2`结构体中的信息及其...

    jna 现成的java调用jna项目 包括jna.jar

    Java Native Access (JNA) 是一个Java库,它允许Java代码与本地库进行交互,无需编写C语言的JNI...在使用JNA时,确保正确导入库,定义正确的接口,并理解本地库的函数签名,即可在Java应用程序中无缝地调用本地函数。

    使用JNA获取窗口句柄,并发送消息

    在Java编程环境中,有时我们需要与操作系统底层交互,这时Java Native Access (JNA) 就派上了用场。JNA提供了一种无需编写C代码或使用JNI(Java Native Interface)即可调用操作系统API的方法。本话题将详细介绍如何...

    JNA的相关jarbao

    例如,Java的整型可以自动映射到C的int,字符串可以映射为C的字符数组。此外,JNA还支持回调函数,使得本地代码可以调用Java方法。 `platform.jar`则包含了针对各种操作系统平台的特定本地库引用。这些库包含了操作...

    jna&jna-platform4.0版和5.6版本.zip

    对于Java开发者来说,正确选择和使用JNA及jna-platform的版本至关重要。选择版本时,需要考虑以下几个因素: - **项目需求**:根据项目需要调用的本机库和API,确认所需的最低支持版本。 - **兼容性**:确保所选版本...

    JNA调用.dll文件或.so动态链接库的代码demo

    JNA提供了一套标准的类型映射,将Java类型自动转换为本地平台类型。例如,Java的`int`对应C的`int`,`String`对应C的`const char*`。对于复杂的数据结构,可以通过自定义类型映射来处理。 5. **回调函数和异步调用...

    java用JNA调用dll实例,包含各种参数调用

    6. **字符串**:JNA支持NUL终止的C风格字符串,你可以使用`String`或`WString`(宽字符)类型作为参数。对于输入字符串,直接传递Java字符串;对于输出字符串,可以使用`Pointer`接收。 7. **输入数组**:对于DLL...

    java通过jna返回结构体例子.rar

    // 必须重写getNativeSize()方法,以计算字符串在内存中的大小 @Override protected int getNativeSize() { return super.getNativeSize() + str.getBytes().length; } } ``` 在Java中调用返回结构体的C函数,...

Global site tag (gtag.js) - Google Analytics