我正在开发一个JavaEE应用程序,用于将文本文件上传到服务器,以处理其内容。 用户的文本来源可能差异很大,尤其是编码。
我想将所有内容转换为UTF-8(持久性即将到来)但首先,我需要正确阅读。
我正在使用InputStreamReader的getEncoding()方法:
public void doThings(HttpServletRequest request) {
Part file = request.getPart("formfile");
InputStreamReader isr = new InputStreamReader(file.getInputStream());
// BUT THIS ALWAYS prints "UTF8" whatever the text file's encoding is :
System.out.println( isr.getEncoding() );
}
我实际上使用的是InputStream,因为该应用程序稍后使用Scanner类和分隔符来切断数据,但如果还有其他方法可行,我不会以任何方式约束它......
感谢您的任何指示
答案 0 :(得分:2)
您需要执行new InputStreamReader(file.getInputStream(), charsetOfFile);
,否则默认为应用程序的平台,显然是UTF-8。
没有可靠的方法来提取编码/字符集。标题不是决定性的,part.getContentType()
也是更多的猜测类型。也许如果出现的字符集可能是第一个指标。
用Windows-1252(Windows Latin-1)替换charset ISO-8859-1(Latin-1),因为所有浏览器都将ISO-8859-1解释为Windows-1252。
Windows-1252也是一个很好的默认设置(因为ISO-8859-1也是HTTP默认设置)。
如果文件内容符合多字节UTF-8格式,请执行此操作。 UTF-8验证。
Charset detection由一些库实现。 我使用语言检测(按频率列表)进行了自己的检测,不完整。
对于字符集检测,将文件读取为二进制数据,字节,不带InputStreamReader。