可能经常有些不是固定字符集的文本文件需要处理,或者接收一些不固定字符集的请求,可能是 GBK 也可能是 UTF8,这时候就可能需要实时判断一下文本的字符集了。

精简后的代码如下:

public static String getCharset(byte[] bytes) {

if(bytes == null || bytes.length < 2) return "GBK";

if(bytes[0] == (byte)0xFF && bytes[1] == (byte)0xFE) {

return "UTF-16LE";

} else if (bytes[0] == (byte)0xFE && bytes[1] == (byte)0xFF) {

return "UTF-16BE";

} else if (bytes[0] == (byte)0xEF && bytes[1] == (byte)0xBB && bytes[2] == (byte)0xBF) {

return "UTF-8";

}

for(int i = 0, b = bytes[i] & 0xff; i < bytes.length; i ++) {

b = bytes[i] & 0xff;

if(b >= 0xF0) return "GBK";

if(0x80 <= b && b <=0xBF) return "GBK";//单独出现BF以下的,也算是GBK

if(0xC0 <= b && b <= 0xDF) {

i ++; b = bytes[i] & 0xff;

if(0x80 <= b && b <= 0xBF) {

continue;//双字节 (0xC0 - 0xDF) (0x80- 0xBF),也可能在GBK编码内

} else {

return "GBK";

}

} else if (0xE0 <= b && b <= 0xEF) {// 也有可能出错,但是几率较小

i ++; b = bytes[i] & 0xff;

if(0x80 <= b && b <= 0xBF) {

i ++; b = bytes[i] & 0xff;

if(0x80 <= b && b <= 0xBF) {

return "UTF-8";

}

}

return "GBK";

}

}

return "GBK";

}

java实时检测_JAVA 实时检测二进制流字符集相关推荐

  1. Java中实现PDF文件转二进制流

    加入相关依赖 <!-- https://mvnrepository.com/artifact/pdfbox/pdfbox --> <dependency><groupId ...

  2. java读取日志_Java实时监控日志文件并输出的方法详解

    前言 最近有一个银行数据漂白系统,要求操作人员在页面调用远端Linux服务器的shell,并将shell输出的信息保存到一个日志文件,前台页面要实时显示日志文件的内容.这个问题难点在于如何判断哪些数据 ...

  3. java 人脸检测_Java人脸检测库

    您可以使用JavaCV进行面部检测.JavaCV是OpenCV的Java包装器.它没有提供真/假但是图片中面部的位置.你可以这样做: public class FaceDetect { // Crea ...

  4. java有道_java中的各种流(老师的有道云笔记)

    内存操作流-字节 之前的文件操作流是以文件的输入输出为主的,当输出的位置变成了内存,那么就称为内存操作流.此时得使用内存流完成内存的输入和输出操作. 如果程序运行过程中要产生一些临时文件,可采用虚拟文 ...

  5. java byte缓存_Java 之 字节缓冲流

    一.字节缓冲输出流 java.io.BufferedOutputStream extends OutputStream BufferedOutputStream:字节缓冲输出流. 继承自父类的共性成员 ...

  6. java buffer 记事本_Java实现记事本|IO流/GUI

    Java实现记事本 题目 利用GUI实现一个简单的记事本(notepad),即打开文件,文字内容显示在界面上: 允许对文字内容进行编辑,并可以保存到文件. 代码 class notPadcontain ...

  7. java中--《_Java中的IO流(五)

    当需要直接把信息输出到文件中的时候,并且想要每次输入完成后立即把信息输出到文件中,演示如下 1 private static void function_demo2() throwsIOExcepti ...

  8. java存储字节_Java字节与字符流永久存储json数据

    使用第三方json转换工具,阿里巴巴json转换工具Fastjson1.2.7. 注意:jar包的导入不再赘述,详见百度. User类,定义两种属性,并创建构造方法与get和set方法 public ...

  9. java音频教程_Java如何使用IO流实现音频的剪切和拼接的示例代码

    这篇文章主要为大家详细介绍了Java使用IO流实现音频的剪切和拼接,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 需求:使用IO流将指定目录下的若干个音频文件的高潮部分,进行剪切,并重新拼接成一首 ...

最新文章

  1. 20 年前毁誉参半的网游《传奇》,背后是怎样的故事?
  2. Win32 API 显示鼠标坐标位置
  3. c 结构体的简单封装1
  4. armitage识别不了漏洞_Shiro RememberMe 漏洞检测的探索之路
  5. 如何用记事本编写运行java程序?
  6. Kaggle-自行车租赁人数预测
  7. C#代码中背后进行的值拷贝
  8. 计算机网络通信选择题,计算机网络教(学)案通信技术选择题试题题库完整
  9. mysql centos_centos7mysql安装
  10. (响应式PC端媒体查询)电脑屏幕分辨率尺寸大全
  11. LintCode 最长公共子串
  12. Linux如何安装iperf软件,【iperf】iperfforLinux-最笨下载
  13. 荣耀手机总显示无法连接服务器,荣耀继承者无法连接服务器是什么原因
  14. oracle数据库学习笔记(二)(创建表、DDL、DML、单行插入数据、多行插入数据)
  15. Redis资料汇总(二) 数据类型
  16. EMD——EEMD——CEEMD
  17. 推荐算法_CIKM-2019-AnalytiCup 冠军源码解读_2
  18. 完整回顾刘强东明尼苏达事件,他的这一夜让京东市值蒸发600亿
  19. Keil MDK入门---从新建一个工程开始
  20. 考研数据结构之查找(9.8)——练习题之编写一个函数利用二分查找算法在一个有序表中插入关键字k并保持表的有序性(C表示)

热门文章

  1. org.apache.shiro.session.UnknownSessionException: There is no session with id [xxxx]的解决方案
  2. win11间歇性卡顿怎么办 windows11间歇性卡顿的解决方法
  3. Spring通过静态方法factory-method或实例工厂factory-bean获取bean对象
  4. WIN32:API串口通讯实例教程
  5. mysql ndb 测试_Mysql性能2:基于JDBC的MySQL NDB性能测试结果
  6. 路径规划之DWA类算法简述
  7. class构造函数实现接口数据整合
  8. 洛谷——P1296 奶牛的耳语
  9. HTML5新增视频标签(HTML5)
  10. 微信小程序API之getLocal