我有一个java程序,它从excel表中读取一些内容并创建XML。
长话短说我需要XML中包含的字符串只包含有效的XML字符并正确编码和需要编码的字符。
问题:在写入文件之前,如何在java中编码这些字符?
谢谢!
注意:这些字符包括:“(“)
和”(”)
以及其他类似字符。
答案 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#Description和http://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 “Unicode” 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名称的构造函数。