判断字符非法utf8编码

    在做腾讯平台开发时,获取的玩家昵称有些会带有腾讯的图标,而使用utf8解析时会出现不可见字符(非utf8编码),写入数据库时会报错。

昵称效果(火狐浏览器):


昵称效果(谷歌浏览器):



SystemHanldelr:params:{"name":"此处为玩家昵称,由于直接添保存会异常,所以截图呈现","roleid":6003}
SystemHandler.GameRoleThree.name://此处为玩家昵称,由于直接添保存会异常,所以截图呈现
//SystemHandler.GameRoleThree.name2:        浪子回头//过滤后效果
[WARN ] 2014-03-30 14:39:21 :
    com.ibatis.common.jdbc.exception.NestedSQLException:   
--- The error occurred while applying a parameter map.  
--- Check the updateRole-InlineParameterMap.  
--- Check the statement (update failed).  
--- Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x91\x91\xE6\xB5...' for column 'name' at row 1
    at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.java:107)
    at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.update(SqlMapExecutorDelegate.java:457)
    at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.update(SqlMapSessionImpl.java:90)
    at com.ibatis.sqlmap.engine.impl.SqlMapClientImpl.update(SqlMapClientImpl.java:66)
    at com.stang.game.dao.impl.GameRoleDaoImpl.updateGameRole(GameRoleDaoImpl.java:44)
    at com.stang.game.cache.ThreadCache.run(ThreadCache.java:242)
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x91\x91\xE6\xB5...' for column 'name' at row 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1362)
    at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeUpdate(SqlExecutor.java:80)
    at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.sqlExecuteUpdate(MappedStatement.java:216)
    at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeUpdate(MappedStatement.java:94)
    ... 5 more

   


可以使用下面代码对字符进行过滤(效果见上面代码)


public static String checkStr(String str){
		String s = null;
		char[] cc = str.toCharArray();
		for(int i = 0; i < cc.length; i++){
			boolean b = isValidChar(cc[i]);
			if(!b)
				cc[i] = ' ';
		}
		s = String.valueOf(cc);
		return s;
	}

	private static boolean isValidChar(char ch) {
	    if ((ch >= '0' && ch <= '9') || (ch >= 'A' && ch <= 'Z')|| (ch >= 'a' && ch <= 'z'))
	        return true;
	    if ((ch >= 0x4e00 && ch <= 0x7fff) || (ch >= 0x8000 && ch <= 0x952f))
	        return true;// 简体中文汉字编码
	    return false;
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值