Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Encoding 使用groovy将ISO-8859-1转换为UTF-8_Encoding_Utf 8_Groovy_Iso 8859 1 - Fatal编程技术网

Encoding 使用groovy将ISO-8859-1转换为UTF-8

Encoding 使用groovy将ISO-8859-1转换为UTF-8,encoding,utf-8,groovy,iso-8859-1,Encoding,Utf 8,Groovy,Iso 8859 1,我需要将ISO-8859-1文件转换为utf-8编码,而不丢失内容转换为信息 我有一个如下所示的文件: <?xml version="1.0" encoding="ISO-8859-1" ?> <HelloEncodingWorld>Üöäüßßß Test!!!</HelloEncodingWorld> 由于字符串不兼容,无法工作。 然后我读了一些关于ByTestStreamReaders/Writer/streamingmarkupbuilder和其他

我需要将ISO-8859-1文件转换为utf-8编码,而不丢失内容转换为信息

我有一个如下所示的文件:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<HelloEncodingWorld>Üöäüßßß Test!!!</HelloEncodingWorld>
由于字符串不兼容,无法工作。 然后我读了一些关于ByTestStreamReaders/Writer/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
}
f=new文件('c:/temp/myiso88591.xml')。getText('ISO-8859-1')
mb=new groovy.xml.StreamingMarkupBuilder()
mb.encoding=“UTF-8”
新的OutputStreamWriter(新文件OutputStream('c:/temp/myutf8.xml'),'utf-8')
(我只是试了一下,效果不错:-)

与java中相同:库为您进行转换。。。 正如deceze所说:当您指定编码时,它将转换为内部格式(utf-16 afaik)。当您在写入字符串时指定另一种编码时,它将转换为此编码


但是,如果您使用XML,就不必担心编码问题,因为XML解析器会处理它。它将读取第一个字符
,使其更为Groovy,并且不需要将整个文件放入内存,您可以使用读写器来流式处理文件。这是我的解决方案,当我的文件对于普通的旧Unix来说太大时
iconv(1)

newfileoutputstream('out.txt')。带writer('UTF-8'){writer->
新文件输入流('in.txt')。withReader('ISO-8859-1'){reader->

writer我对Groovy还没有第一个概念,但我假设如果您为
file.getText
指定文件的编码,它将自动从该编码转换为您的内部编码。也就是说,只要您的内部编码设置为使用UTF-8,您可能不需要做任何其他事情。如果我不知道,请纠正我我在这里偏离了正轨。或者,你得到的确切错误是什么?
一些UTF编码以BOM开始文件。在像ebcdic这样的一些编码中,
抱歉,但它不是正确的,它确实有效。它是这样存储的:
ÃÃÃÃÃÃTest!!!
显示的编码仍然是ISO-8859-1(使用记事本++)也许第一行会迫使编辑器将其显示为…啊,好吧,就是这样,天哪,我已经尝试过很多次了…但从未意识到数据是用utf 8编码的,但显示为ansi…非常感谢。非常好的解决方案。我喜欢使用withReader/Writer的方式。我自己也尝试过,效果很好:)
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
}
<?xml version="1.0" encoding="UTF-8" ?> 
<HelloEncodingWorld>Üöäüßßß Test!!!</HelloEncodingWorld>
def f=new File('c:/data/myiso88591.xml').getText('ISO-8859-1')
new File('c:/data/myutf8.xml').write(f,'utf-8')
new FileOutputStream('out.txt').withWriter('UTF-8') { writer ->
    new FileInputStream('in.txt').withReader('ISO-8859-1') { reader ->
        writer << reader
    }
}