首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Java FileWriter编写非ASCII Unicode字符?

如何使用Java FileWriter编写非ASCII Unicode字符?
EN

Stack Overflow用户
提问于 2011-11-23 08:39:26
回答 3查看 1.8K关注 0票数 0

我有数千个HTML文件要使用Groovy/Java处理,最后我需要生成XML。某些文件中包含字符转义序列’。当我生成输出XML时,对该XML的后续解析报告文件中存在非法的unicode字符。我正在经历的顺序是(在HSQLDB中)-> file->HTMLCleaner->SimpleXMLSerializer->XMLSlurper->CLOB ->FileWriter。

如何在输出中获得正确的字符代码,以便解析器不会报错?

注意:此问题已经过大量修改,以正确表示真正的问题所在。下面的评论指的是原始版本。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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/致敬,以获得答案。

票数 0
EN

Stack Overflow用户

发布于 2011-11-23 09:21:55

只需使用replaceAll即可

代码语言:javascript
运行
复制
yourHtmlFiles.each { f ->
 text = f.text
 text.replaceAll('’', "'");
 // save text
}
票数 0
EN

Stack Overflow用户

发布于 2011-11-23 16:19:20

虽然我同意这个字符不应该造成任何问题,但对于非常大的文件,这里有一个解决方案:

代码语言:javascript
运行
复制
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来替换简单的静态字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8235930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档