判断utf8无bom_[Java] 判断UTF8 无BOM编码
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编码相关推荐
- java判断出栈顺序,java判断出栈顺序是否正确
java判断出栈顺序是否正确 我们知道栈是一种先进后出的数据容器.当一个栈的输入序列是递增序列(例如a,b,c,d),并且在进栈操作时,允许退栈操作,则输出的序列可能有多种形式(例如:d,c,b,a或 ...
- 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 ...
- java判断题_【Java判断题】请大神们进来看下、这些判断题你都知道多少~
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 .判断改错题(每题2分,共20分)(正确的打√,错误的打×并说明原因) 1. Java系统包提供了很多预定义类,我们可以直接引用它们而不必从头开始编写程序 ...
- java 如何判断余数_用java判断一个数是不是回文数!
哈喽大家好,这里是Java小白成长记! 昨天分享了怎么来判断一个数字的奇偶性,其中用到了if选择语句和求余运算,虽然都不是很难的知识点,但是也不可能分享一次就不管了,所以今天继续分享一个和它俩有关的代 ...
- java判断是否为数字(JAVA判断输入是否是数字)
java如何写一个方法判断传进来的参数是否数字 /** * class名:JudgeIfNumeral * class说明:java如何写一个方法判断传进来的参数是否数字 * @author Jr p ...
- java判断出栈顺序,Java判断出栈顺序是不是正确的方法
我们知道栈是一种先进后出的数据容器.当一个栈的输入序列是递增序列(例如a,b,c,d),并且在进栈操作时,允许退栈操作,则输出的序列可能有多种形式(例如:d,c,b,a或a,c,b,d等).但是却肯定 ...
- java判断是否为linux,java判断是否Linux操作系统,判断OS操作系统类型工具类
/** * * @return 是否Linux操作系统 * */ public static boolean isLinux() { return !System.getProperty(" ...
- java 判断是否为邮箱_java如何判断邮箱是否合法
java如何判断邮箱是否合法 java判断邮箱是否合法的方法:使用正则表达式判断,代码为[boolean b=matcher.matches();if (b) {System.out.println( ...
- java判断文件编码是UTF-8还是UTF-8(BOM)还是其他编码
java判断文件编码是UTF-8还是UTF-8(BOM)还是其他编码 final String filePath = "C:\\Users\\小太阳\\Desktop\\java\\2021 ...
最新文章
- linux编译安装mysql 5.1_linux编译安装mysql5.1.x
- 怕蛇的人如何学Python?
- ElasticSearch探索之路(一)初识ElasticSearch:特点、应用场景、架构设计、基本概念
- 百度面试题:从输入url到显示网页,后台发生了什么?
- ansys里面自带chemkin_ANSYS CHEMKINPRO复杂化学反应快速仿真
- asp.net GridView控件的列属性
- 书单:《人人都是产品经理》附录书单
- 线性表文档之静态链表
- 【题解】LuoGu4408:[NOI2003]逃学的小孩
- 国际结算三大方式之一—信用证 Letter of Credit(L/C)
- Foxmail与QQ邮箱关联创建新账户
- matlab保存bln文件,气象万千(冯锦明课题组)-软件程序
- java中的tld_自定义标签tld的使用
- 定时任务---Only no-arg methods may be annotated with @Scheduled
- 数据结构-C语言代码 day6-栈及其应用
- oracle注册服务到监听,监听程序未启动或数据库服务未注册到该监听程序解决方法-Oracle...
- 数控铣削图案及编程_数控卧式铣床 01
- 请叫我程序员!(一)
- weui实例:城市便民自行车查询
- ArcGIS连接PostgreSQL数据库,创建企业级地理数据库
热门文章
- linux平台下MongoDB安装和环境搭建及踩过的坑
- MariaDB-5.5.56 主主复制+keepalived高可用
- 小甲鱼Python第十九讲课后习题
- c++实现数值的整数次方(类似pow())作用
- C#通过对象属性名修改值
- 秒味课堂Angular js笔记------$scope.$watch和$scope.$apply
- 【翻译】Emmet(Zen Coding)官方文档 之七 一览表
- easyui 年份下拉框的构建
- 【git】建git仓库
- 写给Android开发者的混淆使用手册