使用grails更改文件的编码

时间:2014-01-28 14:27:47

标签: grails encoding utf-8 groovy

在我看来,我有一个上传表格:

<input type="file" name="file" value="search file" /><br />

在我的控制器中,我加载它:

def file = request.getFile('file')
def f = file.getInputStream()
def input = f.getText()

所以我现在有一个名为input的String,其中包含文件的内容。

我想用UTF-8。这怎么可能?

编辑:

我的问题是,要上传的文件位于“Windows-1252”中,而äöü等德语字符现在在名为“input”的字符串中有所不同。 如果我用UTF-8中的“Notepad ++”转换文件然后上传它,它就可以了。但我每次都不能这样做。

EDIT2:

def file = request.getFile('file')                      //get file from view
def File tmpfile = new File('C:/tmp/tmpfile.txt')       //create temporary file
file.transferTo(tmpfile)                                //copy into tmpfile
CharsetToolkit toolkit = new CharsetToolkit(tmpfile)    //toolkit with tmpfile
def charset = toolkit.getCharset()                      //save charset in a variable
def input = tmpfile.getText(charset)                    //get text with right charset

我尝试了几个不同的文件。但变量charset总是UTF_8

2 个答案:

答案 0 :(得分:3)

您可以使用getText(String charset)

def input = f.getText('UTF-8')

答案 1 :(得分:1)

我找到了解决方案:

我使用了名为jUniversalChardet的java-bib并编写了以下方法:

String getEncoding ( def inputstream ) {
    def byte[] buf = new byte[4096]

    def UniversalDetector detector = new UniversalDetector(null)

    def nread
    while ((nread = inputstream.read(buf)) > 0 && !detector.isDone()) {
      detector.handleData(buf, 0, nread)
    }
    detector.dataEnd();

    def encoding = detector.getDetectedCharset()

    return encoding
}

在我的代码中,我现在有以下内容:

def file = request.getFile('file')
def f = file.getInputStream()
def encoding = getEncoding(file.getInputStream())
def input = f.getText(encoding)

它有效:)