Java 欧元符号转换发行

Java 欧元符号转换发行,java,string,character-encoding,Java,String,Character Encoding,我尝试将euro符号放入Java字符串中,该字符串通过以下方式传递给本机函数(使用JNA): /*JAVA*/ String s= new String("Euro symbol=€"); nativefunction(s.getBytes(US-ASCII)); /*C++*/ void nativefunction(char *s) { printf("%s",s); } 本机函数输出:Euro-symbol=? 为什么将符号打印为?而不是€ 我还尝试使用欧元符号的ascii

我尝试将euro符号放入Java字符串中,该字符串通过以下方式传递给本机函数(使用JNA):

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

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


/*C++*/
void nativefunction(char *s)
{
    printf("%s",s);
}
本机函数输出:
Euro-symbol=?

为什么将符号打印为
而不是


我还尝试使用欧元符号的ascii码(
\0x80
),但结果是一样的

US-ASCII不包含欧元字符。可能您指的是Windows-1252,如果是,请使用:

nativefunction(s.getBytes("Windows-1252")); 
如果仍然不起作用,请尝试在Java代码中使用Unicode转义序列:

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

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

在内部,Java以UTF-16编码字符串,每个字符使用两个字节。欧元符号的UTF码点为U+20AC,在UTF-16编码中为0x20AC。US-ASCII对每个字符使用一个字节。由于欧元符号不能用美国ascii码表示,编码器用问号替换该字符。阅读CharSetEncoder文档中的相关内容。

您是否检查了代码的编码格式?