V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Kontinue
V2EX  ›  程序员

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

  •  
  •   Kontinue · 2020-04-29 12:09:22 +08:00 · 2865 次点击
    这是一个创建于 1704 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    第 1 条附言  ·  2020-04-29 18:17:15 +08:00
    谢谢大家,最后选择了 juniversalchardet 这个包,常见的几种编码基本上可以分别出来的。
    16 条回复    2020-04-30 09:41:03 +08:00
    lhx2008
        1
    lhx2008  
       2020-04-29 12:11:39 +08:00
    要是这么好解决的话,编辑器都不用提供编码切换了。。无头就统一按 UTF-8 处理吧
    yousabuk
        2
    yousabuk  
       2020-04-29 12:13:25 +08:00 via iPhone
    用户上传时自己选择编码方式,旁边预览文本部分内容按编码后的内容。
    Kontinue
        3
    Kontinue  
    OP
       2020-04-29 12:17:17 +08:00
    @lhx2008 那 gbk 的怎么办呢,也是无头的吧
    cheng6563
        4
    cheng6563  
       2020-04-29 12:17:25 +08:00 via Android
    只能猜
    lhx2008
        5
    lhx2008  
       2020-04-29 12:20:54 +08:00
    @Kontinue #3 如果只有 UTF-8 和 GBK 两种编码,可以用一些方法来猜一下是不是 UTF-8 模式,但是不可能完全准确(比如字符太少了)。
    hcymk2
        6
    hcymk2  
       2020-04-29 12:27:04 +08:00
    chardet
    minami
        7
    minami  
       2020-04-29 12:29:45 +08:00 via Android
    python 有 chatdet 库,java 应该也有移植吧…
    minami
        8
    minami  
       2020-04-29 12:29:57 +08:00 via Android
    @minami chardet
    Foxkeh
        9
    Foxkeh  
       2020-04-29 12:36:58 +08:00
    文件格式有要求的话,
    我的做法是让用户先在上传界面下载模板然后在模板中编辑
    kanezeng
        10
    kanezeng  
       2020-04-29 12:43:17 +08:00
    完美的不太可能,但是如果你可选范围不大的话,可以大概猜一下,比如内容是否符合 utf-8 的变长编码方式,是否落在 GBK 编码范围:8140 - FEFE,剔除 xx7F 码位之类的。
    很久以前我还做过就是比如抽取一段出来用一种编码去读入,看看有没有报错,没报错就转 utf8 再转回来比较一下和之前是不是一致的之类的各种土法炼钢。
    littlewing
        11
    littlewing  
       2020-04-29 12:46:36 +08:00
    只能靠猜,根据编码范围去猜,但不能保证 100%准确
    kingiis
        12
    kingiis  
       2020-04-29 14:44:28 +08:00
    用 utf-8 去读 判断有没有乱码就行了
    xuanbg
        13
    xuanbg  
       2020-04-29 16:29:11 +08:00
    只能按个去枚举,哪个特征符合了就是哪个编码。分辨不出就只能人工选择了。
    slyang5
        14
    slyang5  
       2020-04-29 16:39:54 +08:00
    @kingiis 程序知道什么是乱码 吗??
    lechain
        15
    lechain  
       2020-04-30 00:06:02 +08:00 via Android
    个人觉得可以给用户提供各种编码选项,让用户选择按什麽编码格式来解析他上传的文本
    iminto
        16
    iminto  
       2020-04-30 09:41:03 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2759 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:58 · PVG 13:58 · LAX 21:58 · JFK 00:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.