0
我有編碼的多字節字符將XML文檔多字節字符的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()
)來處理。
謝謝@瑞安我已經嘗試,但不幸的是,字符串是在XML已被寫入,所以實體已經在這一點上是錯誤的 –
FWIW,如果您將String s更改爲&符號(\ u0026),並將expResult更改爲「&」,則只有在您將編碼傳遞給字符串c- tor(返回新的String(out.toByteArray(),「UTF-16」);)。 – Ryan