Java 如何获取文本文件的编码

2020-04-29 12:09:22 +08:00
 Kontinue

现在有这么个需求,用户可以上传一些列的文件,然后需要 web 预览,但是读取文件的时候如何去判断文件编码,至少最基本需要知道是 utf-8 还是 gbk 的。

如果是 utf8 bom 的可以根据前几个字节去判断,但是很多是无 bom 的,不知道应该怎么去判断了

2749 次点击
所在节点    程序员
16 条回复
lhx2008
2020-04-29 12:11:39 +08:00
要是这么好解决的话,编辑器都不用提供编码切换了。。无头就统一按 UTF-8 处理吧
yousabuk
2020-04-29 12:13:25 +08:00
用户上传时自己选择编码方式,旁边预览文本部分内容按编码后的内容。
Kontinue
2020-04-29 12:17:17 +08:00
@lhx2008 那 gbk 的怎么办呢,也是无头的吧
cheng6563
2020-04-29 12:17:25 +08:00
只能猜
lhx2008
2020-04-29 12:20:54 +08:00
@Kontinue #3 如果只有 UTF-8 和 GBK 两种编码,可以用一些方法来猜一下是不是 UTF-8 模式,但是不可能完全准确(比如字符太少了)。
hcymk2
2020-04-29 12:27:04 +08:00
chardet
minami
2020-04-29 12:29:45 +08:00
python 有 chatdet 库,java 应该也有移植吧…
minami
2020-04-29 12:29:57 +08:00
@minami chardet
Foxkeh
2020-04-29 12:36:58 +08:00
文件格式有要求的话,
我的做法是让用户先在上传界面下载模板然后在模板中编辑
kanezeng
2020-04-29 12:43:17 +08:00
完美的不太可能,但是如果你可选范围不大的话,可以大概猜一下,比如内容是否符合 utf-8 的变长编码方式,是否落在 GBK 编码范围:8140 - FEFE,剔除 xx7F 码位之类的。
很久以前我还做过就是比如抽取一段出来用一种编码去读入,看看有没有报错,没报错就转 utf8 再转回来比较一下和之前是不是一致的之类的各种土法炼钢。
littlewing
2020-04-29 12:46:36 +08:00
只能靠猜,根据编码范围去猜,但不能保证 100%准确
kingiis
2020-04-29 14:44:28 +08:00
用 utf-8 去读 判断有没有乱码就行了
xuanbg
2020-04-29 16:29:11 +08:00
只能按个去枚举,哪个特征符合了就是哪个编码。分辨不出就只能人工选择了。
slyang5
2020-04-29 16:39:54 +08:00
@kingiis 程序知道什么是乱码 吗??
lechain
2020-04-30 00:06:02 +08:00
个人觉得可以给用户提供各种编码选项,让用户选择按什麽编码格式来解析他上传的文本
iminto
2020-04-30 09:41:03 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/667232

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX