【发布时间】:2014-01-22 22:10:46
【问题描述】:
我有一个需要编组的 Java 对象。我的对象的属性之一有一个包含商标符号 (™) 的字符串描述。
但在编组完成后,它会显示为问号 (?)。我玩过编码并尝试将其设置为 US-ASCII 然后它返回并完美显示符号。
我用谷歌搜索了 ASCII 和 UTF-8 之间的区别,但看起来 UTF 具有更大的字符集 UTF-8 vs ASCII Text。
话虽如此,如果 UTF-8 具有更大的字符集,从 UTF-8 转到 ASCII 看起来有点危险。
我也看过这个Usages of ASCII and UTF-8,ASCII 的使用率不到 1%。
使用 JAXB 对 ™ 进行编码的正确方法是什么?
我的编组器对其进行解码如下所示:
public String marshall(final Response response) {
final Marshaller marshaller = getContextResponse().createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.FALSE);
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
final StringWriter writer = new StringWriter();
synchronized (responseMarshalMutex) {
marshaller.marshal(response, writer);
}
return writer.getBuffer().toString();
}
【问题讨论】:
-
我相信与您的说法相反的说法是正确的。由于 UTF-8 是 ASCII 的超集,因此从 ASCII 转换为 UTF-8 始终是安全的,因为可以保证不会丢失任何信息。每个字符都将被保留。但是,从 UTF-8 转换为 ASCII 是危险的,因为任何非 ASCII 字符都会被转换为类似
'?'的字符(或者会产生异常,具体取决于您进行转换的方式)。 -
不知道我的措辞是否正确,但正如我所说的“如果 UTF-8 有更大的字符集,从 UTF-8 转到 ASCII 很危险”。这确实表明 UTF-8 = (ASCI + more)。还是我错过了什么:)
标签: java encoding utf-8 jaxb marshalling