如何在Java中为UTF-8编码XML文档

时间:2013-04-23 15:07:15

标签: java excel utf-8

我有一个java程序,它从excel表中读取一些内容并创建XML。

长话短说我需要XML中包含的字符串只包含有效的XML字符并正确编码和需要编码的字符。

问题:在写入文件之前,如何在java中编码这些字符?

谢谢!

注意:这些字符包括:“(“)和”(”)以及其他类似字符。

2 个答案:

答案 0 :(得分:2)

据我所知,您想要以UTF-8格式编写XML,以UTF-8编写文件以下是使用OutputStreamWriter的Java标准方法:

File f = new File("test.xml");
BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f), "UTF-8"));
wr.write("xml text here");

UTF-8是一种可变宽度编码,可以表示每个字符的Unicode字符集,请参阅http://en.wikipedia.org/wiki/UTF-8#Descriptionhttp://en.wikipedia.org/wiki/Quotation_mark#Smart_quotes

此外,在你的情况好像你要转换“到“并希望UTF-8的转换过程中,这将被处理(我可能是错的,但是这是我从你的反应感觉的)。你是说在XSL有“字符但XML有”?如果是这样,那么它就会遇到一个不同的问题。

编辑:只是为了澄清,如果XSL有“我没有看到任何问题”,并且就UTF-8编码而言,编写的XML也具有相同的特性。

以下XML是包含Unicode字符的有效XML:

<?xml version="1.0" encoding="UTF-8"?>
<root>
<summary>This is a summary, text may contain &#x201C;Unicode&#x201D; characters</summary>
</root>

在任何浏览器中打开,如果支持的字符集的XML将被正确地以其他方式以下错误非XML投诉字符的情况下呈现将被抛出(至少在铬,可能取决于浏览器):

  

CharRef:无效的十进制值

对于XML格式的有效字符集范围,您可以参考:http://www.w3.org/TR/REC-xml/#charsets

  

Char :: =#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] |   [#x10000-#x10FFFF]
  / *任何Unicode字符,不包括代理块,FFFE和FFFF。 * /

对于不合规的XML字符集,请参阅:http://www.w3.org/TR/unicode-xml/#Charlist

要写入&LT类似;,&在XML gt;中”,因为这些需要被写为安培; LT,&安培; GT,&安培; QUOT,Unicode需要在以下的方式被写入字符:&安培; #xNNNN;其中NNNN是Unicode十六进制数。请参阅上面的示例XML。

因此,在以编程方式编写XML时,您需要明确处理此类字符,就像遇到此类字符时将其转换为&amp; #x格式一样。

答案 1 :(得分:-1)

每当读取文件或编写文件时,请务必定义编码并使用UTF-8。要小心,因为所有这些方法在没有编码字符串的情况下也存在,在这种情况下,使用OS默认编码。

电子。 G。使用

InputStreamReader myReader=InputStreamReader(inputStream,"UTF-8");

而不是没有carset名称的构造函数。