[英]Convert Windows-1252 xml file to UTF-8
有什么方法可以将大型XML文件(500 + MBs)从Java中的“ Windows-1252”编码转换为“ UTF-8”编码?
当然:
InputStreamReader
的FileInputStream
作为输入 OutputStreamWriter
具有UTF-8编码的FileOutputStream
作为输出 重复读入数组,然后写很多东西:
char[] buffer = new char[16 * 1024]; int charsRead; while ((charsRead = input.read(buffer)) > 0) { output.write(buffer, 0, charsRead); }
请注意,由于它是XML,因此您可能还需要手动更改XML声明,因为它应该指定它在Windows-1252中。
这是基于流的事实,这意味着您无需担心文件的大小-它一次只读取内存中的16K字符。
这是一次性的工作还是您需要重复运行并提高效率的工作?
如果是一次性的,我看不到需要Java编码。 例如,只需运行查询“。”
java net.sf.saxon.Query -s:input.xml -qs:. -o:output.xml
确保分配了3Gb的内存。
如果您要重复执行此操作,并且希望使用流式处理方法,则必须在将其作为文本(如Jon Skeet建议)或XML进行处理之间进行选择。 作为XML进行操作的优点主要是可以处理XML声明,并将字符引用转换为字符。 最简单的是使用JAXP身份转换:
Source in = new StreamSource(new File("input.xml"));
TransformerFactory f = TransformerFactory.newInstance();
Result out = new StreamResult(new File("output.xml"));
f.newTransformer().transform(in, out);
如果这是一次性的,那么Java可能不是最合适的工具。 考虑iconv
:
iconv -f windows-1252 -t utf-8 <source.xml >target.xml
这具有流式传输的所有优点,而无需您编写任何代码。
与Michael的解决方案不同,这不会处理XML声明。 如有必要,请手动进行编辑,或者现在使用UTF-8,则将其省略。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.