gpt4 book ai didi

java - 多字节字符 XML 实体

转载 作者:行者123 更新时间:2023-12-01 12:00:50 27 4
gpt4 key购买 nike

我在将多字节字符编码为 XML 文档时遇到问题

import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;

public class XmlWriter {
static final XMLOutputFactory outputFactory = XMLOutputFactory.newFactory();
static XMLStreamWriter streamWriter;

public static String Write(String s) throws XMLStreamException, UnsupportedEncodingException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
streamWriter = outputFactory.createXMLStreamWriter(out, "utf-16");
streamWriter.writeCharacters(s);
streamWriter.flush();
return new String(out.toByteArray());
}
}


public class XmlWriterTest extends TestCase {

public void testWrite() throws Exception {
System.out.println("Write");
String s = "\uD803\uDC22";
String expResult = "𐰢";
String result = XmlWriter.Write(s);
assertEquals(expResult, result);

}

我尝试了很多字符集等的扭曲,但没有成功;我不断得到 的输出

�&#xdc22

这是生成 Excel 工作簿 (*.xlsx) 的应用程序的一部分,并且由于这些字符而在 Excel 中打开文档时失败。

如何才能获得正确的 XML 实体?我希望这将由 XML 库处理(原始代码使用 Apache 的 StringEscapeUtils.escapeXml() )。

最佳答案

您正在使用的字符串构造函数(new String(byte[]))使用平台默认编码。尝试在备用 c-tor 中指定编码(new String(byte[], Charset) 或 new String(byte[], String)

关于java - 多字节字符 XML 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27988701/

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