具体处理方法及样例如下:

/**
* 屏蔽超过三个字节以上的字符
* @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),该处理是舍弃特殊字符的更多相关文章

  1. VC++中多字节字符集和Unicode之间的互换

    在Visual C++.NET中,默认的字符集是Unicode,这和Windows默认的字符集是一致的,不过在老的VC6.0等工程中,默认的字符集形式是多字节字符集(MBCS:Multi-Byte C ...

  2. 通过编写串口助手工具学习MFC过程——(三)Unicode字符集的宽字符和多字节字符转换

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...

  3. Ruby多字节字符的设计

    Perl.Python的多字节字符处理方式是UCS(Universal Code Set),Ruby的多字节字符处理方式是CSI(Code Set Independent).UCS的做法是,不管你读取 ...

  4. C++多字节字符转换为宽字符的两种方法

    目前知道有两种方式:可以提供宽字符与ANSI字符之间的转换, 第一种由COM库提供的函数 char*  _com_util::ConvertBSTRToString(BSTR ); BSTR _com ...

  5. pathinfo()在php不同版本中对于对多字节字符处理的不同结果

    phpinfo()函数在处理路径时,在php的低版本中无法处理多字节字符,这里测试的是php5.3和php5.6 的区别 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  6. 关于MultiByteToWideChar与WideCharToMultiByte代码测试(宽字符与多字节字符的转换)以及字符串的转换代码测试

    #pragma once #include <stdio.h> //getchar() #include <tchar.h> #include <stdlib.h> ...

  7. Oracle数据库报错: ORA-29275:部分多字节字符

    Oracle数据库报错: ORA-29275:部分多字节字符 就是你查出来的字符串(有汉字的)有可能会出问题, 在认为有问题的字段 用 to_nchar("字段")包起来 比如 你 ...

  8. unicode字符和多字节字符的相互转换接口

    作者:朱金灿 来源:http://blog.csdn.net/clever101 发现开源代码的可利用资源真多,从sqlite3的源码中抠出了几个字符转换接口,稍微改造下了发现还挺好用的.下面是实现代 ...

  9. 字符集研究之多字节字符集和unicode字符集

    作者:朱金灿 来源:http://blog.csdn.net/clever101 本文简介计算机中两大字符集:多字节字符集和unicode字符集的出现及关系. 首先我们须要明确的是计算机是怎样找到字符 ...

随机推荐

  1. 一个简单但详细的解释Windows文件映射读取数据文件的例子

    #include <windows.h>#include <string.h>#include <string>#include <iostream>u ...

  2. 说说Android应用的persistent属性

    转载地址:http://my.oschina.net/youranhongcha/blog 摘要 在Android系统中,有一种永久性应用.它们对应的AndroidManifest.xml文件里,会将 ...

  3. jpg转bmp(使用libjpeg)

    源: jpg转bmp(使用libjpeg) [转]JPEG压缩原理 bmp转jpg(使用libjpeg)

  4. ListView与RadioButton组合——自定义单选列表

      标签: radiobuttonlistviewandroidlayout 2013-09-10 11:13 19396人阅读 评论(8) 收藏 举报  分类: Android(19)  版权声明: ...

  5. mysql 隔离级别与锁

    1.什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点. 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库正确地改变状态后,数据库的一致性约 ...

  6. 如何使用UDP进行跨网段广播(转)

    源:如何使用UDP进行跨网段广播 广播域首先我们来了解一下广播域的概念.广播域是网络中能接收任一台主机发出的广播帧的所有主机集合.也就是说,如果广播域内的其中一台主机发出一个广播帧,同一广播域内所有的 ...

  7. FZU 1063 三维扫描

    水题.DFS求连通块. #include<cstdio> #include<cstring> #include<cmath> #include <iomani ...

  8. php中设置时区

    第一种办法:在php.ini 中设置:date.timezone=Asia/Shanghai(注意不加单引号或双引号) 第二种办法:在程序中ini_set('date.timezone','Asia/ ...

  9. Java:reflection

    参考:http://docs.oracle.com/javase/tutorial/reflect/index.html what and why? 通过反射来检测或者修改应用某些对象在运行时的状态或 ...

  10. Struts2配置dtd约束

    Struts2和Struts1的区别: 一.elclipse-ee开发 搭建环境eclipse-ee 1.加入jar包  apps/struts2-blank.war解压 2.在web.xml文件中配 ...