UTF-8是一种变长的编码方式,节省存储空间,适用于互联网传输。

Windows系统使用带BOM(Byte Order Mark)UTF-8编码的可以通过文件前三个字节来判断:

EF BB BF

UTF-8编码规则:

1. 单字节的字符,字节的第一位设为0,对于英语文本,UTF-8码只占用一个字节,和ASCII码完全相同;

2. n个字节的字符(n>1),第一个字节的前n位设为1,第n+1位设为0,后面字节的前两位都设为10,这n个字节的其余空位填充该字符unicode码,高位用0补足。

“好”字的Unicode编码是:597D(0101 1001 0111 1101),属于上图中3个字节序列,从右往左依次填充其中的“x“,不足补0,得到11100101 10100101 10111101

得到“好”的UTF-8编码:E5A5BD

注:如果文件基本是中文字符,使用GBK编码(汉字2个字节)相比UTF-8编码存储更有优势。

下面是利用Java判断字节数组是否为非BOM的UTF-8编码

public static boolean validUTF8(byte[] bytes, int len) {   int expectedLen;   for (int i = 0; i < len; i++) {      // Lead byte analysis      if      ((bytes[i] & 0b10000000) == 0b00000000) continue;      else if ((bytes[i] & 0b11100000) == 0b11000000) expectedLen = 2;      else if ((bytes[i] & 0b11110000) == 0b11100000) expectedLen = 3;      else if ((bytes[i] & 0b11111000) == 0b11110000) expectedLen = 4;      else if ((bytes[i] & 0b11111100) == 0b11111000) expectedLen = 5;      else if ((bytes[i] & 0b11111110) == 0b11111100) expectedLen = 6;      else    return false;      // Count trailing bytes      while (--expectedLen > 0) {         if (++i >= len) {            return false;         }         if ((bytes[i] & 0b11000000) != 0b10000000) {            return false;         }      }   }   return true;}

判断utf8无bom_[Java] 判断UTF8 无BOM编码相关推荐

  1. java判断出栈顺序,java判断出栈顺序是否正确

    java判断出栈顺序是否正确 我们知道栈是一种先进后出的数据容器.当一个栈的输入序列是递增序列(例如a,b,c,d),并且在进栈操作时,允许退栈操作,则输出的序列可能有多种形式(例如:d,c,b,a或 ...

  2. java 读utf-8 xml_用Java和UTF-8編碼生成有效的XML。

    I am using JAXP to generate and parse an XML document from which some fields are loaded from a datab ...

  3. java判断题_【Java判断题】请大神们进来看下、这些判断题你都知道多少~

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 .判断改错题(每题2分,共20分)(正确的打√,错误的打×并说明原因) 1. Java系统包提供了很多预定义类,我们可以直接引用它们而不必从头开始编写程序 ...

  4. java 如何判断余数_用java判断一个数是不是回文数!

    哈喽大家好,这里是Java小白成长记! 昨天分享了怎么来判断一个数字的奇偶性,其中用到了if选择语句和求余运算,虽然都不是很难的知识点,但是也不可能分享一次就不管了,所以今天继续分享一个和它俩有关的代 ...

  5. java判断是否为数字(JAVA判断输入是否是数字)

    java如何写一个方法判断传进来的参数是否数字 /** * class名:JudgeIfNumeral * class说明:java如何写一个方法判断传进来的参数是否数字 * @author Jr p ...

  6. java判断出栈顺序,Java判断出栈顺序是不是正确的方法

    我们知道栈是一种先进后出的数据容器.当一个栈的输入序列是递增序列(例如a,b,c,d),并且在进栈操作时,允许退栈操作,则输出的序列可能有多种形式(例如:d,c,b,a或a,c,b,d等).但是却肯定 ...

  7. java判断是否为linux,java判断是否Linux操作系统,判断OS操作系统类型工具类

    /** * * @return 是否Linux操作系统 * */ public static boolean isLinux() { return !System.getProperty(" ...

  8. java 判断是否为邮箱_java如何判断邮箱是否合法

    java如何判断邮箱是否合法 java判断邮箱是否合法的方法:使用正则表达式判断,代码为[boolean b=matcher.matches();if (b) {System.out.println( ...

  9. java判断文件编码是UTF-8还是UTF-8(BOM)还是其他编码

    java判断文件编码是UTF-8还是UTF-8(BOM)还是其他编码 final String filePath = "C:\\Users\\小太阳\\Desktop\\java\\2021 ...

最新文章

  1. linux编译安装mysql 5.1_linux编译安装mysql5.1.x
  2. 怕蛇的人如何学Python?
  3. ElasticSearch探索之路(一)初识ElasticSearch:特点、应用场景、架构设计、基本概念
  4. 百度面试题:从输入url到显示网页,后台发生了什么?
  5. ansys里面自带chemkin_ANSYS CHEMKINPRO复杂化学反应快速仿真
  6. asp.net GridView控件的列属性
  7. 书单:《人人都是产品经理》附录书单
  8. 线性表文档之静态链表
  9. 【题解】LuoGu4408:[NOI2003]逃学的小孩
  10. 国际结算三大方式之一—信用证 Letter of Credit(L/C)
  11. Foxmail与QQ邮箱关联创建新账户
  12. matlab保存bln文件,气象万千(冯锦明课题组)-软件程序
  13. java中的tld_自定义标签tld的使用
  14. 定时任务---Only no-arg methods may be annotated with @Scheduled
  15. 数据结构-C语言代码 day6-栈及其应用
  16. oracle注册服务到监听,监听程序未启动或数据库服务未注册到该监听程序解决方法-Oracle...
  17. 数控铣削图案及编程_数控卧式铣床 01
  18. 请叫我程序员!(一)
  19. weui实例:城市便民自行车查询
  20. ArcGIS连接PostgreSQL数据库,创建企业级地理数据库

热门文章

  1. linux平台下MongoDB安装和环境搭建及踩过的坑
  2. MariaDB-5.5.56 主主复制+keepalived高可用
  3. 小甲鱼Python第十九讲课后习题
  4. c++实现数值的整数次方(类似pow())作用
  5. C#通过对象属性名修改值
  6. 秒味课堂Angular js笔记------$scope.$watch和$scope.$apply
  7. 【翻译】Emmet(Zen Coding)官方文档 之七 一览表
  8. easyui 年份下拉框的构建
  9. 【git】建git仓库
  10. 写给Android开发者的混淆使用手册