我有数千个HTML文件要使用Groovy/Java处理,最后我需要生成XML。某些文件中包含字符转义序列’。当我生成输出XML时,对该XML的后续解析报告文件中存在非法的unicode字符。我正在经历的顺序是(在HSQLDB中)-> file->HTMLCleaner->SimpleXMLSerializer->XMLSlurper->CLOB ->FileWriter。
如何在输出中获得正确的字符代码,以便解析器不会报错?
注意:此问题已经过大量修改,以正确表示真正的问题所在。下面的评论指的是原始版本。
发布于 2011-11-24 08:45:02
答案是java.io.FileWriter在默认情况下不使用UTF8编码。请改用以下代码来创建编写器:
def writer = new OutputStreamWriter(new FileOutputStream(outputFile),"UTF-8")
向http://www.malcolmhardie.com/weblogs/angus/2004/10/23/java-filewriter-xml-and-utf-8/致敬,以获得答案。
发布于 2011-11-23 09:21:55
只需使用replaceAll即可
yourHtmlFiles.each { f ->
text = f.text
text.replaceAll('’', "'");
// save text
}发布于 2011-11-23 16:19:20
虽然我同意这个字符不应该造成任何问题,但对于非常大的文件,这里有一个解决方案:
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来替换简单的静态字符串。
https://stackoverflow.com/questions/8235930
复制相似问题