Java JNA结果UTF8中的字符编码结果
我正在使用JNA获取窗口数据。如下所示,结果是一个字节数组。我需要西里尔文字符的可读性,但它目前没有发生,它只是返回了一堆问号。问题不在于转换为字符串,我已经检查了字节数组值 我试过Java JNA结果UTF8中的字符编码结果,java,encoding,utf-8,jna,cyrillic,Java,Encoding,Utf 8,Jna,Cyrillic,我正在使用JNA获取窗口数据。如下所示,结果是一个字节数组。我需要西里尔文字符的可读性,但它目前没有发生,它只是返回了一堆问号。问题不在于转换为字符串,我已经检查了字节数组值 我试过System.setProperty(“jna.encoding”,“UTF-8”)但它看起来只对Java字符串输入有用,而对输出不有用 代码: 感谢阅读,任何帮助都将不胜感激 编辑 谢谢你的技术法师。最终解决方案: char[] buffer = new char[2048]; HWND hwnd = User32
System.setProperty(“jna.encoding”,“UTF-8”)代码>但它看起来只对Java字符串输入有用,而对输出不有用
代码:
感谢阅读,任何帮助都将不胜感激
编辑
谢谢你的技术法师。最终解决方案:
char[] buffer = new char[2048];
HWND hwnd = User32.INSTANCE.GetForegroundWindow();
User32.INSTANCE.GetWindowTextW(hwnd, buffer, 512);
String result = String.valueOf(buffer).trim();
返回的字节数组中的字符是什么?您确定它是UTF8而不是windows的默认编码(windows-1251
)吗?您是否尝试过使用不同编码的Native.toString()
?您是否尝试过GetWindowTextW()
,这将完全绕过此问题?已解决!不知道GetWindowTextW(),它不包括在javadoc中(GetWindowTextA()也不包括,但只有GetWindowText())。非常感谢你!定义的GetWindowText()
映射实际上自动映射到GetWindowText()。我们没有为ASCII版本添加显式绑定。
char[] buffer = new char[2048];
HWND hwnd = User32.INSTANCE.GetForegroundWindow();
User32.INSTANCE.GetWindowTextW(hwnd, buffer, 512);
String result = String.valueOf(buffer).trim();