开发者

Euro symbols JNA conversion issue

开发者 https://www.devze.com 2023-02-17 22:46 出处:网络
I\'m trying to put euro symbol in a Java string that is passed to a native function(using JNA) in this way:

I'm trying to put euro symbol in a Java string that is passed to a native function(using JNA) in this way:

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

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


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

native function outpu开发者_开发百科t: Euro symbol=?

Why the symbol is printed as ? instead .

I also tried to use ascii code of euro symbol(\0x80) but the result is the same.


US-ASCII doesn't contain euro character. Perhaps you meant Windows-1252, if so, use:

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

If it still doesn't work, try to use Unicode escape sequence in Java code:

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

If it works for \u20ac but doesn't work for , you need to configure source code encoding.


Internally, Java encodes strings in UTF-16, which uses two bytes for each character. The UTF codepoint for the EURO SIGN is U+20AC, which is 0x20AC in the UTF-16 encoding. US-ASCII uses one byte for each character. Since the euro sign cannot be represented in US ascii, the encoder replaces this character with a question mark. Read about in in the CharSetEncoder documentation.

0

精彩评论

暂无评论...
验证码 换一张
取 消