gpt4 book ai didi

java - 商标 (™) 符号显示为 ?在使用 JAXB 编码过程中?

转载 作者:行者123 更新时间:2023-12-02 06:17:57 25 4
gpt4 key购买 nike

我有一个需要编码的 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();
}

最佳答案

当您告诉 JAXP 使用 ASCII 作为编码时,它将使用字符实体表示任何非 ASCII 字符...例如 (TM) 字符。这将毫无损坏地通过 7 位 channel ,并且通常可以使用不适当的字符编码“安全”解码。

当您告诉 JAXP 使用 UTF-8 作为编码时,非 ASCII 字符将被编码为多字节序列,其中许多字符都设置了最高位。如果您随后在某个时刻尝试(例如偶然)使用错误的编码对其进行解码,则可能会出现某种乱码。 (例如,如果 XML 是在 HTTP 请求或回复中发送的,并且您忽略在“内容类型” header 中指定字符编码,则可能会发生这种情况。

如果可以选择,在生成 XML 时最好使用 ASCII(或 Latin-1)作为编码。这将最大限度地提高您最终解析 XML 时获得相同文本值的机会。

关于java - 商标 (™) 符号显示为 ?在使用 JAXB 编码过程中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21283327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com