我有数千个HTML文件要使用Groovy / Java进行处理,我需要在最后生成XML。某些文件中包含字符转义序列’
。当我生成输出XML时,该XML的后续解析就是抱怨文件中存在非法的unicode字符。我要经历的顺序是HTML文件 - > HTMLCleaner-> SimpleXMLSerializer-> XMLSlurper-> CLOB(在HSQLDB中) - > ClobInputStream-> FileWriter。
如何在输出中获取正确的字符代码,以便解析器不会抱怨?
注意:此问题已经过大量修改,无法正确表示真正的问题。以下评论涉及原始版本。
答案 0 :(得分:0)
只需使用replaceAll
:
yourHtmlFiles.each { f ->
text = f.text
text.replaceAll('’', "'");
// save text
}
答案 1 :(得分:0)
虽然我同意这个角色不会引起任何问题,但这里有一个非常大的文件的解决方案:
def replaceSingleQuoteCharacterInFile(def input) {
if(input instanceof String) {
input = new File(input)
}
File out = File.createTempFile("temp_xml", ".xml")
out.withPrintWriter('UTF-8') { writer ->
input.eachLine('UTF-8') { line ->
writer.println line.replace('’', "'");
}
}
out.renameTo(input)
}
def input = new File('/path/to/input.xml')
replaceSingleQuoteCharacterInFile(input)
println input.text
这将逐行流式传输文件,直接替换有问题的字符。它还将输出流式传输到临时文件,然后替换最后的原始文件,以防止在处理过程中损坏输入文件。
另请注意使用replace
代替replaceAll
- 没有理由使用regex
进行简单的静态字符串替换。
答案 2 :(得分:0)
答案是java.io.FileWriter默认情况下不使用UTF-8编码。而是使用以下代码来创建编写器:
def writer = new OutputStreamWriter(new FileOutputStream(outputFile),"UTF-8")
给答案提示http://www.malcolmhardie.com/weblogs/angus/2004/10/23/java-filewriter-xml-and-utf-8/。