2011-03-21 80 views
3

我训练探索把欧元符号在传递到本地功能的Java字符串以这种方式(使用JNA):欧元符号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

你是否检查过你的代码的编码格式? – Raveline 2011-03-21 11:37:24

回答

4

US-ASCII不包含欧元字符。也许你的意思的Windows 1252,如果是这样,使用方法:

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

如果还是不行,请尝试在Java代码中使用Unicode转义序列:

String s= new String("Euro symbol=\u20ac"); 

如果它适用于\u20ac但不适用于,您需要配置源代码编码。

+1

太棒了!现在它的作品....我尝试了两种解决方案.... – Kevin 2011-03-21 11:51:40

0

Java在内部对UTF-16中的字符串进行编码,UTF-16使用两个字节作为每个字符。 EURO SIGN的UTF代码点为U + 20AC,UTF-16编码为0x20AC。 US-ASCII为每个字符使用一个字节。即使我们的欧元符号不能用ascii表示,编码器会用一个问号代替这个字符。在CharSetEncoder文档中阅读有关内容。