关于多字节字符入库失败处理(所谓的Emji),该处理是舍弃特殊字符
具体处理方法及样例如下:
/**
* 屏蔽超过三个字节以上的字符
* @param strByte
* @return
*/
public static String filterUtf8(byte[] strByte){
List<Byte> byteList = new ArrayList<Byte>();
byte B1 = (byte) (1<<7);
byte B2 = (byte) (B1 | (1<<6));
byte B3 = (byte) (B2 | (1<<5));
byte B4 = (byte) (B3 | (1<<4));
byte B5 = (byte) (B4 | (1<<3));
byte B6 = (byte) (B5 | (1<<2));
for(int i = 0 ; i < strByte.length ; i ++){
if((strByte[i] & B1) == 0){
byteList.add(strByte[i]);
continue;
}
if((strByte[i] & B6) == B6){
i = i + 5;
continue;
}
if((strByte[i] & B5) == B5){
System.out.println(strByte[i]);
i = i + 4;
continue;
}
if((strByte[i] & B4) == B4){
i = i + 3;
continue;
}
if((strByte[i] & B3) == B3){
i = i + 2;
if(((byte)(strByte[i] & B1) == B1) && ((byte)(strByte[i-1] & B1) == B1)){
byteList.add(strByte[i-2]);
byteList.add(strByte[i-1]);
byteList.add(strByte[i]);
}
}
if((strByte[i] & B2) == B2){
i = i + 1;
if((byte)(strByte[i] & B1) == B1){
byteList.add(strByte[i-1]);
byteList.add(strByte[i]);
}
}
}
byte[] bytes = new byte[byteList.size()];
for(int i = 0 ; i < byteList.size() ; i ++){
bytes[i] = byteList.get(i);
}
return new String(bytes);
}
注意测试用例中特殊符号:
public static void main(String[] args) throws UnsupportedEncodingException {
String str="ff的范德萨分
关于多字节字符入库失败处理(所谓的Emji),该处理是舍弃特殊字符的更多相关文章
- VC++中多字节字符集和Unicode之间的互换
在Visual C++.NET中,默认的字符集是Unicode,这和Windows默认的字符集是一致的,不过在老的VC6.0等工程中,默认的字符集形式是多字节字符集(MBCS:Multi-Byte C ...
- 通过编写串口助手工具学习MFC过程——(三)Unicode字符集的宽字符和多字节字符转换
通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...
- Ruby多字节字符的设计
Perl.Python的多字节字符处理方式是UCS(Universal Code Set),Ruby的多字节字符处理方式是CSI(Code Set Independent).UCS的做法是,不管你读取 ...
- C++多字节字符转换为宽字符的两种方法
目前知道有两种方式:可以提供宽字符与ANSI字符之间的转换, 第一种由COM库提供的函数 char* _com_util::ConvertBSTRToString(BSTR ); BSTR _com ...
- pathinfo()在php不同版本中对于对多字节字符处理的不同结果
phpinfo()函数在处理路径时,在php的低版本中无法处理多字节字符,这里测试的是php5.3和php5.6 的区别 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- 关于MultiByteToWideChar与WideCharToMultiByte代码测试(宽字符与多字节字符的转换)以及字符串的转换代码测试
#pragma once #include <stdio.h> //getchar() #include <tchar.h> #include <stdlib.h> ...
- Oracle数据库报错: ORA-29275:部分多字节字符
Oracle数据库报错: ORA-29275:部分多字节字符 就是你查出来的字符串(有汉字的)有可能会出问题, 在认为有问题的字段 用 to_nchar("字段")包起来 比如 你 ...
- unicode字符和多字节字符的相互转换接口
作者:朱金灿 来源:http://blog.csdn.net/clever101 发现开源代码的可利用资源真多,从sqlite3的源码中抠出了几个字符转换接口,稍微改造下了发现还挺好用的.下面是实现代 ...
- 字符集研究之多字节字符集和unicode字符集
作者:朱金灿 来源:http://blog.csdn.net/clever101 本文简介计算机中两大字符集:多字节字符集和unicode字符集的出现及关系. 首先我们须要明确的是计算机是怎样找到字符 ...
随机推荐
- 小米1S iptables禁止443端口
shell@android:/system/bin # ./iptables -A INPUT -p tcp --dport 443 -j DROP./iptables -A INPUT -p tcp ...
- 深度学习 for java http://deeplearning4j.org/
http://deeplearning4j.org/ http://deeplearning4j.org/zh-neuralnet-overview
- python+django+bootstrap
python install django 置环境变量,将这个目录添加到系统环境变量中: C:\Python36\Lib\site-packages\django\ cmd下测试: 1.输入pytho ...
- Arduino中hex文件的保存及应用(转)
源:Arduino中hex文件的保存及应用 arduino在编译.链接.下载之后,hex文件自动删除了,造成软件仿真(如用proteus仿真)及其他单片机板应用的不便.以下是自己实践的小结,与大家分享 ...
- POJ 3421 X-factor Chains
线型素数筛+质因素分解+组合数. AC后发现这样做效率有点低..766ms. #include<stdio.h> #include<string.h> #include< ...
- HUST 1372 marshmallow
很简单的博弈题.....算几组能得到规律了. 某个状态先手要赢 等价于 之前有一种状态是后手赢,先手可以保证让现在这个状态到达那个状态 #include<cstdio> #include& ...
- APP导致界面卡死,iPhone卡死
实测,是 Reachability 类创建实例过多导致 http://stackoverflow.com/questions/34063166/ios-9-app-freeze-with-consol ...
- C#常用网址
C# 编程指南 https://msdn.microsoft.com/zh-cn/library/67ef8sbd.aspx
- java web面试
1. session和cookie的区别和联系,session的生命周期,多个服务部署时session管理. 原博http://blog.csdn.net/shuaishenkkk/article/d ...
- Windows 7 Professional安装多语言包
本文出自 "王春海的博客" 博客,请务必保留此出处http://wangchunhai.blog.51cto.com/225186/223635 下载了Windows 7 Prof ...