上传的文本文件编码不正确
Incorrect encoding from uploaded text file
我正在开发一个 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 class 和定界符来分割数据,但如果有其他方法,我不会以任何方式受其约束。 .
感谢指点
你需要做 new InputStreamReader(file.getInputStream(), charsetOfFile);
否则它默认为应用程序的平台,显然是 UTF-8。
没有可靠的方法来提取 encoding/charset。 headers不是决定性的,part.getContentType()
也是比较猜测的类型。也许字符集如果出现可能是第一个指标。
将字符集 ISO-8859-1 (Latin-1) 替换为 Windows-1252 (Windows Latin-1),因为所有浏览器都将 ISO-8859-1 解释为 Windows-1252.
Windows-1252 也是一个很好的默认值(因为 ISO-8859-1 也是 HTTP 默认值)。
如果文件内容符合多字节UTF-8格式,则取之。
UTF-8 验证。
Charset detection 由一些库实现。
我使用语言检测(通过频率列表)进行了自己的检测,不完整。
对于字符集检测,将文件作为二进制数据、字节读取,无需 InputStreamReader。
我正在开发一个 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 class 和定界符来分割数据,但如果有其他方法,我不会以任何方式受其约束。 .
感谢指点
你需要做 new InputStreamReader(file.getInputStream(), charsetOfFile);
否则它默认为应用程序的平台,显然是 UTF-8。
没有可靠的方法来提取 encoding/charset。 headers不是决定性的,part.getContentType()
也是比较猜测的类型。也许字符集如果出现可能是第一个指标。
将字符集 ISO-8859-1 (Latin-1) 替换为 Windows-1252 (Windows Latin-1),因为所有浏览器都将 ISO-8859-1 解释为 Windows-1252.
Windows-1252 也是一个很好的默认值(因为 ISO-8859-1 也是 HTTP 默认值)。
如果文件内容符合多字节UTF-8格式,则取之。 UTF-8 验证。
Charset detection 由一些库实现。 我使用语言检测(通过频率列表)进行了自己的检测,不完整。
对于字符集检测,将文件作为二进制数据、字节读取,无需 InputStreamReader。