java代码判断txt文件的编码并输出

3 篇文章 0 订阅
2 篇文章 0 订阅

业务上遇到一个需要把txt文档响应回前端页面的需求,因为系统默认是utf-8格式的,所以在解析ansi等编码格式的txt文件时会乱码,这里就需要判断txt文件的编码格式是什么了。
在解决问题的途中看了很多文章,基本都没有用处,浪费了很多时间……
幸好看到了一位大佬的文章,解决了问题。
在这里疑惑一下,不能解决广泛问题的方法,为什么打着解决xxx问题的标签呢?真不是误导人吗?

		cn.kmpro.model.core.File f = fileService.getCachedFile( fileId );
        if (f == null) return new ResponseEntity<byte[]>( HttpStatus.NOT_FOUND );
        String cd = f.getName() + "." + f.getExt();
        String rtn = FileUtil.getAgentFileName( request, cd );
        HttpHeaders headers = new HttpHeaders();
//        headers.setContentType( FileUtil.whatType( f.getExt() ) );
        headers.set( "Content-Disposition", "inline;" + rtn );
        headers.set( "Content-Type", FileUtil.whatMimeType( f.getExt() ) );
        String path = f.getPath();
        java.io.File file = new java.io.File( "e://www.txt" );
        headers.add( "Content-Length", String.valueOf( file.length() ) );
        
        //以下是解析txt的编码格式,并把解析的数据返回前端
		try (FileInputStream fileInputStream = new FileInputStream(file)){

            byte[] buf = new byte[4096];

            UniversalDetector detector = new UniversalDetector(null);
            int nread;
            while ((nread = fileInputStream.read(buf)) > 0 && !detector.isDone()) {
                detector.handleData(buf, 0, nread);
            }
            detector.dataEnd();
            String encoding = detector.getDetectedCharset();
            detector.reset();
            if(encoding == null || encoding.equals("IBM855") || encoding.equals("WINDOWS-1252")) encoding = "gbk";

            logger.info("txt文件编码:"+encoding);

            MediaType mediaType = new MediaType("text","txt", Charset.forName(encoding));
            headers.setContentType(mediaType);

            return new ResponseEntity<InputStreamResource>( new InputStreamResource( new FileInputStream(file) ), headers, HttpStatus.OK );
        } catch (Exception e) {
            logger.error("读取失败",e);
            return new ResponseEntity<byte[]>( HttpStatus.NOT_FOUND );
        }

解决方法来源
链接: 判断TXT文件的编码方式.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值