我正在尝试将欧元符号放入一个Java字符串中,该字符串以这种方式传递给本机函数(使用JNA):
/*JAVA*/
String s= new String("Euro symbol=€");
nativefunction(s.getBytes(US-ASCII));
/*C++*/
void nativefunction(char *s)
{
printf("%s",s);
}
原生函数输出:Euro symbol=?
为什么符号打印为?
而不是€
。
我还尝试使用欧元符号(\0x80
)的ascii代码,但结果是一样的。
答案 0 :(得分:4)
US-ASCII不包含欧元字符。也许你的意思是Windows-1252,如果是这样,请使用:
nativefunction(s.getBytes("Windows-1252"));
如果仍然无效,请尝试在Java代码中使用Unicode转义序列:
String s= new String("Euro symbol=\u20ac");
如果它适用于\u20ac
但不适用于€
,则需要配置源代码编码。
答案 1 :(得分:0)
在内部,Java以UTF-16编码字符串,每个字符使用两个字节。 EURO SIGN的UTF代码点是U + 20AC,UTF-16编码为0x20AC。 US-ASCII为每个字符使用一个字节。由于欧元符号无法在美国ascii中表示,因此编码器会将此字符替换为问号。请阅读CharSetEncoder文档中的内容。