繁体   English   中英

如何使用Java对XML文档进行UTF-8编码

[英]How to encode UTF-8 for XML document in Java

我有一个Java程序,可以从Excel工作表中读取一些内容并创建XML。

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

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

谢谢!

注意:这些是字符,例如:“ (“)和” (”)以及其他类似字符。

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

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投诉字符,则会引发以下错误(至少在Chrome中,可能取决于浏览器):

CharRef:无效的十进制值

有关XML中有效字符集的范围,请参见: http : //www.w3.org/TR/REC-xml/#charsets

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

有关不兼容的XML字符集,请访问: http : //www.w3.org/TR/unicode-xml/#Charlist

类似于在XML中写<,>,”(因为它们需要写成&lt,&gt;”), Unicode字符需要按以下方式写:&#xNNNN;其中NNNN是Unicode十六进制数。请参阅上面的示例XML。

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

每当读取文件或写入文件时,请确保定义编码并使用UTF-8。 请注意,因为所有这些方法也确实存在而没有编码字符串,在这种情况下,将使用OS默认编码。

例如 采用

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM