通过java程序,我正在创建一个xml的股票持有者。生成的xml看起来像 -
<?xml version="1.0" encoding="UTF-8" ?>
<urlset>
<url>
<loc>FirstName-LastName/id/</loc>
</url>
</urlset>
有一些股票持有人在其名称中有特殊字符,例如A.Pitkänen。现在,当我看到这个股票持有人的xml看起来像 -
<?xml version="1.0" encoding="UTF-8" ?>
<urlset>
<url>
<loc>/A-Pitk寥n/ELS_1005091/</loc>
</url>
</urlset>
这使得xml无效。为什么会这样? java程序是 -
FileWriter fstream = new FileWriter("c:\stock-holders.xml");
final BufferedWriter out = new BufferedWriter(fstream);
try {
// Making Connection and query the stock holders to get the resultset
String aId = "";
String aFName = "";
String aLName = "";
out.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n");
out.write("<urlset>\n");
while (rs.next()) {
String url = "";
aFName = rs.getString(2);
if (StringUtils.isNotEmpty(aFName) ) {
aFName = aFName.trim();
url += aFName;
}
aLName = rs.getString(3);
if (StringUtils.isNotEmpty(aLName)) {
aLName = aLName.trim();
url += "-" + aFName;
}
aId = rs.getString(1);
if (StringUtils.isNotEmpty(aId)) {
aId = aId.trim();
url += "/" + aId + "/";
}
out.write("<url>\n");
out.write("<loc>" + url + "</loc>\n");
out.write("</url>\n");
out.flush();
}
out.write("</urlset>");
out.close();
}
答案 0 :(得分:3)
Sicne你的XML文件应该用UTF-8编码编写,你需要配置你的Writer
来使用那个编码而不是系统默认编码:
FileOutputStream fstream = new FileOutputStream("c:\stock-holders.xml");
OutputStreamWriter writer = new OutputStreamWriter(fstream, "UTF-8");
final BufferedWriter out = new BufferedWriter(writer);
请注意,出于这个原因,不建议使用FileWriter
- 它不能配置为使用默认编码以外的编码。
此外,也许最好使用一些现有的API来构造XML文件(例如DOM或StAX),而不是通过字符串连接来实现。例如,您的解决方案没有考虑到您的数据可能包含XML中非法的字符,应该进行转义。
答案 1 :(得分:1)
我怀疑问题是你正在使用FileWriter而不是连接一个OutputStreamWriter的FileOutputStream,其中OSW指定“utf-8”作为编码
答案 2 :(得分:0)
你可以使用更短的东西:
PrintWriter out = new PrintWriter("c:\\stock-holders.xml", "UTF-8");
此构造函数自Java 1.5起可用。
文档说:
使用。创建一个没有自动行刷新的新PrintWriter 指定的文件名和字符集。这个便利构造函数创建 必要的中间
OutputStreamWriter
,它将编码 使用提供的字符集的字符。
完成所有flush()
次调用后,您需要调用方法write
。