gpt4 book ai didi

java - 上传的文本文件的编码不正确

转载 作者:行者123 更新时间:2023-12-02 02:31:13 24 4
gpt4 key购买 nike

我正在开发一个 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类和分隔符来分割数据,但如果有其他方法,我不会以任何方式绑定(bind)到它......

谢谢各位指点

最佳答案

您需要执行 new InputStreamReader(file.getInputStream(), charsetOfFile); 否则它默认为应用程序的平台,显然是 UTF-8。

没有可靠的方法来提取编码/字符集。 header 不是决定性的,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。

关于java - 上传的文本文件的编码不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47064308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com