欧元符号 JNA 转换问题

3

我正在尝试在Java字符串中插入欧元符号,并以以下方式将其传递给本地函数(使用JNA):

/*JAVA*/
String s= new String("Euro symbol=€");

nativefunction(s.getBytes(US-ASCII));


/*C++*/
void nativefunction(char *s)
{
    printf("%s",s);
}

本地函数输出:欧元符号=?

为什么会打印出?而不是

我还尝试使用欧元符号的 ASCII 码(\0x80),但结果仍然相同。


你检查过代码的编码格式了吗? - Raveline
2个回答

4

US-ASCII字符集不包含欧元符号。如果你想使用Windows-1252字符集,请使用以下内容:

nativefunction(s.getBytes("Windows-1252")); 

如果仍然无法工作,请尝试在Java代码中使用Unicode转义序列:
String s= new String("Euro symbol=\u20ac");  

如果它对于\u20ac有效,但对于无效,则需要配置源代码编码。


0

在内部,Java使用UTF-16编码字符串,每个字符使用两个字节。欧元符号的UTF代码点为U+20AC,在UTF-16编码中为0x20AC。US-ASCII为每个字符使用一个字节。由于欧元符号无法在US ASCII中表示,编码器将此字符替换为问号。请阅读CharSetEncoder文档了解更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接