【问题标题】:Euro symbols JNA conversion issue欧元符号 JNA 转换问题
【发布时间】:2011-03-21 11:34:58
【问题描述】:

我正在尝试将欧元符号放入以这种方式传递给本机函数(使用 JNA)的 Java 字符串中:

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

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


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

本机函数输出:Euro symbol=?

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

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

【问题讨论】:

  • 你检查过你的代码的编码格式吗?

标签: java string character-encoding


【解决方案1】:

US-ASCII 不包含欧元字符。也许您的意思是 Windows-1252,如果是,请使用:

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

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

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

如果对\u20ac有效,对无效,则需要配置源码编码。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-11-11
      • 2012-08-11
      • 2013-10-26
      • 2023-03-28
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      相关资源
      最近更新 更多