乱码一般都是正常编码被错误的解析而导致。每个错误的编码,都会对应着一个正确的编码,也就是,出现频率高的乱码字符,其实就是出现高频字符(一般都是汉字)对应的乱码。
所以说,如果找到高频字符对应的乱码,在sql表里,使用like 查询即可以找到乱码行。
也就是说,查找到一系列高频乱码字符,就可以很容易的查找到绝大多数乱码行。
由于有乱码的表里存储的数据可能是不同行业、不同领域的信息,高频汉字可能不尽相同。(生命科学领域里,细、胞、蛋、白、质、核、酸等这些字频率会非常高;而计算机领域里,内、存、储、变、量、进、程等汉字会是调频汉字;其它领域亦类似)。
所以查找剔除乱码记录时,最好是整理一个最准确乱码字符表。
下面给出一个整理乱码表比较直接、有效的方法(是笔者所探索发现的方法):
1. 找到一定数量的乱码记录(建议在200条以上)
2. 把这些乱码整理出来,并拆分成单字,并统计每个单字出现频率。(建议使用excel+UE/editplus等工具)
3. 取最高频的50个单字(这里当然是要找明显是乱码的单字;也可以不是50个字,80个100个也行)
4. 使用UE或excel生成对应的50个sql like语句,形式如下
select * from [乱码表] where [乱码字段] like ‘%锛%’
select * from [乱码表] where [乱码字段] like ‘%绂%’
select * from [乱码表] where [乱码字段] like ‘%脠%’
select * from [乱码表] where [乱码字段] like ‘%┖%’
select * from [乱码表] where [乱码字段] like ‘%锲%’
……
为了查询方便,最把生成一个union语句,如下
select * from [乱码表] where [乱码字段] like ‘%悎%’ union
select * from [乱码表] where [乱码字段] like ‘%灏%’ union
select * from [乱码表] where [乱码字段] like ‘%楁%’ union
select * from [乱码表] where [乱码字段] like ‘%闀%’ union
select * from [乱码表] where [乱码字段] like ‘%寰%’ union
select * from [乱码表] where [乱码字段] like ‘%阍%’ union
…..
5. 使用上步生成的sql语句查询,查询到结果基本上全部都是乱码行(把乱码记录复制下来,下一步有用),把这些行的主键ID号复制粘贴到ue/editplus,整理成一个逗号拼接形式,就可以使用一个in语句删除
delete from [乱码表] where [主键id] in(num1,num2,num3,…)
[如果上步语句查询结果里有非乱码行,则明记下非乱码行的ID号,在生成delete … in … 语句时,剔除这些ID号,就可保证万无一失]
6. 如果需要更进一步删除乱码,可对上一步记下的乱码记录做以下步骤:
单字分隔-统计词频-取法高频乱码单字-整理sql like语句-查询-确认-生成delete… in…语句-删除
这一过程可以继续多次进行,直至没有乱码行为止。
[注]
1. “乱码”只是习惯说法。乱码单字其实也都是正常的字符——多半是比较生僻的汉字,类似于时下流行已久的“火星文”。其中当然也有一些常见的汉字。
2. 上面提到清理乱码方法是提到的”200条乱码记录”、”50个乱码单字”是笔者操作中使用,你也可以增减这些数目,以达到最佳的清理效果。

延伸阅读
- 变态的Access2007:在Access2007中创建SQL传递查询(执行SQl语句)
- 手工入侵SQL服务器/sql攻破方法及技巧大演练
- SQL Server中truncate、delete和drop的异同点
- SQL手动注入分析/手动注入检测/手动注入脚本命令精华
- SQL LEFT JOIN 关键字
- sql注入原理实例解析
- SQL盲注攻击技术概览综述
- 微软官方提供的用于监控MS SQL Server运行状况的工具及SQL语句
- SQL注入中跨库查询/mssql暴库
- MySQL 5 乱码问题处理办法
- ftp目录文件名乱码/使用原始ftp命令解决
- phpmyadmin3.x版在windows下的新版本php里日期显示乱码的补丁方案
- VIM 文件编码识别与乱码处理
- php使用iconv进行从utf-8转为gb2312字符编码出错解决方案
- UTF-8编码 简介
0 条评论。