0

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

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

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

谢谢!

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

4

2 回答 2

2

据我了解您想以 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#智能报价

此外,在您的情况下,您似乎想将“转换为”,并希望在 UTF-8 转换期间可以处理此问题(我可能错了,但这是我从您的回复中看到的)。您是说在 XSL 中具有“字符但 XML 有“? 如果是这样,那么它是一个不同的问题,那么正在讨论什么。

编辑:澄清一下,如果 XSL 具有“并且写入的 XML 也具有相同的字符,就 UTF-8 编码而言,我认为没有任何问题。

以下 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 中编写 <,>," 因为这些字符需要编写为 <,>,",Unicode字符需要以下列方式编写:&#xNNNN; 其中 NNNN 是 Unicode 十六进制数。请参阅上面的示例 XML。

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

于 2013-04-23T15:21:40.770 回答
-1

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

例如。利用

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

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

于 2013-04-23T15:22:14.750 回答