关于多字节字符入库失败处理(所谓的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字符集的出现及关系. 首先我们须要明确的是计算机是怎样找到字符 ...
随机推荐
- MySQL:MySQL的安装
一.Linux:MySQL的源码安装 1.安装前的准备 在安装之前需要安装一下必备的包和工具 gcc/g++:MySQL5.6开始,需要使用g++进行编译. cmake:MySQL5.5开始,使用cm ...
- Lambda应用设计模式 [转载]
Lambda应用设计模式 前言 在使用 Lambda 表达式时,我们常会碰到一些典型的应用场景,而从常用场景中抽取出来的应用方式可以描述为应用模式.这些模式可能不全是新的模式,有的参考自 Java ...
- Max Flow
Max Flow 题目描述 Farmer John has installed a new system of N−1 pipes to transport milk between the N st ...
- PAT (Advanced Level) 1002. A+B for Polynomials (25)
为0的不要输出. #include<iostream> #include<cstring> #include<cmath> #include<algorith ...
- 结合Pnotify插件--app-jquery-notify.js
$.NOTIFY = { showSuccess : function (title, text, context) { var opt = { title : title, text : text, ...
- IIS发布WebService的一些常见问题
安装IIS过程,在控制面板程序à程序功能à打开或关闭windows功能. 将Internet信息服务中的选项全部选中,点击确定. 验证IIS是否正确安装,等待几分钟后IIS配置完成在浏览器输入http ...
- css运用中,对position属性的认识
position属性有: static : 无特殊定位,对象遵循HTML定位规则 absolute : 将对象从文档流中拖出,使用left,right,top,bottom等属性进行绝对定位.而其层叠 ...
- ZOJ 3930 Dice Notation
简单模拟题.一个int写成了char,搞了4个多小时.真垃圾.. #include<stdio.h> #include<string.h> +],s[+]; +]; +]; i ...
- 求两个字符串最大的子字符串C#
此代码由Java改写而来,字符串支持中文格式的. string str1 = "中国ab-15"; string str2 = "中国ab-23"; byte[ ...
- iOS开发——浅谈构架与用户体验
工作不是千篇一律的重复,从中寻找乐趣才是我们应该做的. 作为一名码农,做过几个项目,每次做项目的时候都会自己构思,如果完全是我自己设计,会怎么去设计?心里一直没有满意的答案,不管怎么布局,好像都感觉差 ...