在我看来,我有一个上传表格:
<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
答案 0 :(得分:3)
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)
它有效:)