我在将多字节字符编码为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);
}
我尝试了许多扭曲的charsets等但无济于事;我一直得到
的输出&安培;#xd803;&安培;#xdc22
这是生成Excel工作簿(* .xlsx)的应用程序的一部分,并且由于这些字符而在Excel中打开文档时失败。
如何才能实现正确的XML实体?我希望这可以由XML库处理(原始代码使用Apache的StringEscapeUtils.escapeXml()
)。
答案 0 :(得分:1)
您正在使用的字符串构造函数(new String(byte []))使用平台默认编码。尝试在备用c-tor中指定编码(new String(byte [],Charset)或new String(byte [],String)