我需要将ISO-8859-1文件转换为utf-8编码,而不会丢失内容错误......
我有一个看起来像这样的文件:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<HelloEncodingWorld>Üöäüßßß Test!!!</HelloEncodingWorld>
我不想将其编码为UTF-8。 我试过以下:
f=new File('c:/temp/myiso88591.xml').getText('ISO-8859-1')
ts=new String(f.getBytes("UTF-8"), "UTF-8")
g=new File('c:/temp/myutf8.xml').write(ts)
由于String不兼容,无法正常工作。 然后我读了一些关于bytestreamreaders / writers / streamingmarkupbuilder等的内容......
然后我试了f=new File('c:/temp/myiso88591.xml').getText('ISO-8859-1')
mb = new groovy.xml.StreamingMarkupBuilder()
mb.encoding = "UTF-8"
new OutputStreamWriter(new FileOutputStream('c:/temp/myutf8.xml'),'utf-8') << mb.bind {
mkp.xmlDeclaration()
out << f
}
这完全不是我想要的......
我只想用ISO-8859-1读取器获取xml读取的内容,然后将其放入一个新的(旧)文件中...为什么这么复杂: - /
结果应该是,并且文件应该在utf-8中真正编码:
<?xml version="1.0" encoding="UTF-8" ?>
<HelloEncodingWorld>Üöäüßßß Test!!!</HelloEncodingWorld>
感谢您的回答 干杯
答案 0 :(得分:12)
def f=new File('c:/data/myiso88591.xml').getText('ISO-8859-1')
new File('c:/data/myutf8.xml').write(f,'utf-8')
(我只是尝试了一下,它有效: - )
与java相同:库为你做转换...... 如deceze所说:当你指定编码时,它将被转换为内部格式(utf-16 afaik)。在编写字符串时指定其他编码时,它将转换为此编码。
但是如果您使用XML,则无论如何都不必担心编码,因为XML解析器会处理它。它将读取第一个字符<?xml
并确定这些字符的基本编码。之后,它能够从您的xml标头中读取编码信息并使用它。
答案 1 :(得分:10)
使其更加Groovy,并且不要求整个文件适合内存,您可以使用读者和编写器来流式传输文件。当我的文件对于普通的旧版本iconv(1)
而言太大时,这是我的解决方案。
new FileOutputStream('out.txt').withWriter('UTF-8') { writer ->
new FileInputStream('in.txt').withReader('ISO-8859-1') { reader ->
writer << reader
}
}