欧元符号JNA转换问题

时间:2011-03-21 11:34:59

标签: java string character-encoding

我正在尝试将欧元符号放入一个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代码,但结果是一样的。

2 个答案:

答案 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文档中的内容。