- 浏览: 99478 次
- 来自: ...
文章分类
最新评论
-
yrandy:
...
java删除(替换)不可见的unicode/utf-8字符(主要是html显示不了的字符) -
shanyanzhou:
非常感谢 [color=red][/color]
获取浏览器选中区域内容的js
java删除(替换)不可见的unicode/utf-8字符(主要是html显示不了的字符)
今天遇到一个问题,由于编辑人员从excel等7788的地方copy内容过来,其中有不可见的字符,导致输出内容看上去是对的,其实是多了一个零长度的字符(比如:0000200B ZERO WIDTH SPACE),下面的代码基本解决了以上问题。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>
window.onload=function(){
var zero_len_charcode=[]
var div = document.getElementById('ttt')
for(var i=0;i<=0xffff;i++){//
var c = String.fromCharCode(i);
if (!c) continue;
div.innerHTML = "|"+c+"|";
if (div.offsetWidth == 16) //这里的16是我机器的2个'||'的显示长度,请自己调节
zero_len_charcode.push(i.toString(16));
}
console.log('0x'+zero_len_charcode.join(",0x"))
}
</script>
</head>
<body>
<span id=ttt></span>
</body>
</html>
上面的js代码用于提取出看不见的字符(主要是在html上看不见,也就是前面说的0长度的),copy上面console输出的内容,然后去java里做服务器端处理(为什么这么麻烦,因为swing我不熟悉,而且也不一定可以做这样的长度适应判断)
private static String zerolize(String s) { if (s.length() < 4) { s = "000".substring(0, 4 - s.length()) + s; } return s; } public static void main(String[] args) throws IOException { int[] input = new int[] { 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xad, 0x483, 0x484, 0x485, 0x486, 0x487, 0x488, 0x489, 0x559, 0x55a, 0x58a, 0x591, 0x592, 0x593, 0x594, 0x595, 0x596, 0x597, 0x598, 0x599, 0x59a, 0x59b, 0x59c, 0x59d, 0x59e, 0x59f, 0x5a0, 0x5a1, 0x5a2, 0x5a3, 0x5a4, 0x5a5, 0x5a6, 0x5a7, 0x5a8, 0x5a9, 0x5aa, 0x5ab, 0x5ac, 0x5ad, 0x5ae, 0x5af, 0x5b0, 0x5b1, 0x5b2, 0x5b3, 0x5b4, 0x5b5, 0x5b6, 0x5b7, 0x5b8, 0x5b9, 0x5ba, 0x5bb, 0x5bc, 0x5bd, 0x5bf, 0x5c1, 0x5c2, 0x5c4, 0x5c5, 0x5c6, 0x5c7, 0x606, 0x607, 0x608, 0x609, 0x60a, 0x63b, 0x63c, 0x63d, 0x63e, 0x63f, 0x674, 0x6e5, 0x6e6, 0x70f, 0x76e, 0x76f, 0x770, 0x771, 0x772, 0x773, 0x774, 0x775, 0x776, 0x777, 0x778, 0x779, 0x77a, 0x77b, 0x77c, 0x77d, 0x77e, 0x77f, 0xa51, 0xa75, 0xb44, 0xb62, 0xb63, 0xc62, 0xc63, 0xce2, 0xce3, 0xd62, 0xd63, 0x135f, 0x200b, 0x200c, 0x200d, 0x200e, 0x200f, 0x2028, 0x2029, 0x202a, 0x202b, 0x202c, 0x202d, 0x202e, 0x2044, 0x2071, 0xf701, 0xf702, 0xf703, 0xf704, 0xf705, 0xf706, 0xf707, 0xf708, 0xf709, 0xf70a, 0xf70b, 0xf70c, 0xf70d, 0xf70e, 0xf710, 0xf711, 0xf712, 0xf713, 0xf714, 0xf715, 0xf716, 0xf717, 0xf718, 0xf719, 0xf71a, 0xfb1e, 0xfc5e, 0xfc5f, 0xfc60, 0xfc61, 0xfc62, 0xfeff, 0xfffc }; StringBuilder b = new StringBuilder(); int lastContinuous = -1; int span = 0; for (int i = 0; i < input.length; i++) { if (lastContinuous == -1 && i < input.length - 1 && input[i] + 1 == input[i + 1]) { lastContinuous = input[i]; span = 1; } else { if (input[i] == lastContinuous + span) { span++; } else if (lastContinuous != -1) { if (b.length() > 0) b.append("|"); b.append(String.format("[\\u%s-\\u%s]", zerolize(Integer.toHexString(lastContinuous)), zerolize(Integer.toHexString(lastContinuous + span - 1)))); span = 0; lastContinuous = -1; i--; } else { b.append("|\\u" + zerolize(Integer.toHexString(input[i]))); } } } if (lastContinuous != -1) { if (b.length() > 0) b.append("|"); b.append(String.format("[\\u%s-\\u%s]", zerolize(Integer.toHexString(lastContinuous)), zerolize(Integer.toHexString(lastContinuous + span - 1)))); } System.out.println(b.toString()); Pattern pattern = Pattern.compile(b.toString()); Matcher matcher = pattern.matcher("helloworld\ufffc撒范德萨分的阿萨德"); System.out.println(matcher.replaceAll("")); }
最后组成的正则如下:
[\u007f-\u009f]|\u00ad|[\u0483-\u0489]|[\u0559-\u055a]|\u058a|[\u0591-\u05bd]|\u05bf|[\u05c1-\u05c2]|[\u05c4-\u05c7]|[\u0606-\u060a]|[\u063b-\u063f]|\u0674|[\u06e5-\u06e6]|\u070f|[\u076e-\u077f]|\u0a51|\u0a75|\u0b44|[\u0b62-\u0b63]|[\u0c62-\u0c63]|[\u0ce2-\u0ce3]|[\u0d62-\u0d63]|\u135f|[\u200b-\u200f]|[\u2028-\u202e]|\u2044|\u2071|[\uf701-\uf70e]|[\uf710-\uf71a]|\ufb1e|[\ufc5e-\ufc62]|\ufeff|\ufffc
发表评论
-
eclipse maven项目运行时报错could not find the main class的解决办法
2017-05-03 14:35 736打开.project文件,从其他可以有运行main的地方c ... -
通过hql控制hibernate一对多的集合属性的排序
2016-05-29 14:57 678【问题】 当hibernate实体中存在一对多关系集合 ... -
java date 归一化"天"
2012-09-16 11:35 2581java中date只是用来表示日期,一直认为和时区没有关系;实 ... -
myeclipse转eclipse jee的工程文件补丁(主要是maven补丁)
2012-01-12 18:48 1786以下是用来将myeclipse(或者其他没有加maven配置的 ... -
putty记住密码登陆的解决方案(autoputty+pietty+winscp)
2012-01-12 14:05 7452一直以来都觉得putty的界面很舒服,不过碍于他不能记住密码也 ... -
二元二次 - 有待通用化为N元N次
2009-06-18 09:17 914function Formula(){ this.a = ... -
gson 1.3 vs json-lib
2009-09-24 14:23 1198今天json-lib 0.6又爆了一个错误,说什么没有set方 ... -
使用jdk的executorservice+future来执行批量操作,节省处理时间
2009-11-05 18:55 1116ThreadPoolExecutor executor = n ... -
extjs 学习笔记
2009-12-24 14:30 820以前大搞过extjs,后来不用了,就忘了。。。最近又弄。。。哎 ... -
根据浏览器(ie)不同版本执行引用js
2010-06-29 10:43 829<!--[if IE 6]> &l ... -
office打开老是报宏安全性错误什么的
2010-07-20 16:33 729打开WORD,点击OFFICE按钮,WORD选项,加载项,最下 ... -
extjs pitfalls
2010-08-17 11:14 7251. Ext.state.manager 开发的时候请慎用! ... -
java Excel 工具(修改excel表格并保存)
2010-09-27 17:32 1854最近搞excel,用到JXL 。然后读写的时候遇到问题 -- ... -
Ext.ux.TabPanel 在IE7下的bug
2010-10-28 14:12 606Extjs2的一个扩展 地址:http://icyfire.j ... -
java unicode转换代码
2010-11-08 15:48 750static Pattern p = Pattern.comp ... -
html选中区域判断
2011-06-10 13:06 1078getSelectionHTML : function() { ... -
测试字符串替换速度
2011-06-10 13:42 855private static String escape(St ... -
oracle 索引出错解决方法
2011-07-27 11:01 929【jdbc的错误】ORA-01502: index 'XXXX ... -
解决extjs grid文字不能选中的问题
2011-09-02 18:59 2213.x-selectable, .x-selectable * ... -
flash和html跨域交互
2011-10-20 11:21 1352当你在a域(a.com)下的html上引用b域(b.com)的 ...
相关推荐
描述中提到,这个程序是基于与Java版本的互操作性需求而修改的,确保了与Java实现的DES/CBC/PKCS5Padding解密过程兼容,并且能够正确处理UTF-8编码的中文字符,这意味着它能与在线加密网站的结果保持一致。...
在上述代码中,我们首先获取了UTF-8和ASCII的`Charset`对象,然后创建了一个UTF-8编码器,并将UTF-8字符串编码为字节数组。由于ASCII只能表示128个字符,所以在转换过程中可能会遇到无法表示的字符,这时我们需要...
1. ASCII到Unicode/UTF-8:由于ASCII是UTF-8的子集,所以ASCII字符可以直接转换为UTF-8,无需额外操作。对于需要转换为Unicode的ASCII文本,只需将其码点作为Unicode码点即可。 2. Unicode/UTF-8到ASCII:将Unicode...
本文将深入探讨标题中提及的几种编码方式:Unicode、UTF-8以及GBK,同时也会涉及到URL编码和XML转义,这些都是编程和网络通信中不可或缺的部分。 首先,Unicode是一个字符集,旨在为世界上所有语言提供一个统一的...
UTF-8、UNICODE(也称为UCS-2或UTF-16)和GBK是三种常见的字符编码标准,它们在处理多语言文本时各有特点。本文将深入探讨这些编码方式,以及如何在C语言中进行相互转换。 首先,UTF-8是一种变长编码,它使用1到4个...
在WindowsFormsApplication1这个文件名中,我们可以推测这是一个基于.NET Framework开发的Windows桌面应用程序,它可能包含了实现GB2312和UTF-8字符转换的代码或者用户界面。开发者可能通过这个应用来帮助用户解决在...
许多编程语言如Python、Java、JavaScript都内置了对UTF-8的支持,可以方便地进行字符串的编码、解码、查找、替换等操作。同时,由于UTF-8的广泛使用,开发者在处理来自不同来源的数据时,很少会遇到编码不匹配的问题...
用户可以批量搜索并替换整个文档或多个文档中的特定UTF-8编码的字符串,这对于清理、整理或统一大量文本数据的工作来说,极大地提高了效率。 其次,EmEditor9支持无限的撤销操作,这意味着用户在编辑过程中如果误...
相比之下,UTF-8是一种基于Unicode的编码方式,能够表示世界上几乎所有的字符集,包括各种语言的文字和符号。UTF-8的广泛使用使得它成为现代软件开发中的首选编码格式,尤其在网络传输和跨平台操作中。 针对“GBK...
2 支持ANSI,Unicode,UTF-8等编码互换 3 可以设置无限个书签(9种图标可换)轻松定位 4 空格,制表符彩色显示,并可互相转换 5 可以对任意的文本块进行操作,ALT键+鼠标 6 对括号{}〔〕()可以高亮配对...
4. **UTF-8**:UTF-8是一种常用的Unicode编码方式,它能高效地表示各种语言的字符。在Java中,字符串默认采用UTF-16编码,但在与网络交互或处理文件时,UTF-8常被用作首选编码,因为它在大多数情况下都能避免乱码...
UTF-8是一种广泛使用的Unicode字符编码方案,它可以表示Unicode字符集中的所有字符。BOM,即字节顺序标记,是UTF-8编码中可选的一部分,用于标识数据流的字节顺序。在大多数情况下,BOM在UTF-8编码中并不必要,因为...
UTF-8,全称“8位无符号字符转换格式”,是一种可变长度的Unicode编码,它使用1到4个字节来表示一个字符。UTF-8的优势在于其对ASCII字符(英文字符)的兼容性,只需1字节即可表示,且在网页和网络传输中被广泛采用,...
这个过程首先将UTF-8字符串转换为字节数组,然后使用Encoding类的Convert方法进行编码转换,最后将转换后的字节数组再解码为GB2312字符串。 需要注意的是,不是所有UTF-8编码的字符都能找到对应的GB2312编码,因为...
可以使用`System.out.println(new String(bytes, "UTF-8"))`这样的方式,将字节数组转换为可读的字符串。 在提供的`TestT.java`文件中,很可能是包含了一个测试案例,用来演示如何检测和处理这类诡异的不可见字符。...
2. **Unicode到UTF-8的转换**:接下来将Unicode编码的字符串转换为UTF-8编码,以便在网络上传输。 3. **URL编码**:最后对UTF-8编码后的字符串进行URL编码,确保其可以在URL中安全传输。 #### 五、具体实现 下面...
RGB2312和UTF-8是两种不同的字符编码方式,它们在处理中文字符时有着不同的规则和方式。本文将详细介绍这两种编码格式以及它们之间的相互转换。 RGB2312,全称为“简体中文国标交换码”,是1981年我国制定的一种...
在这种情况下,通常会考虑升级到支持更多字符的字符集,如AL32UTF8(Unicode UTF-8编码),以保证数据的正确显示和存储。 在实际项目中,还可能涉及到事务管理、异常处理、连接池配置等更复杂的操作。为了提高性能...
4. **系统环境变量**:确认系统环境变量`JAVA_TOOL_OPTIONS`是否已设置为`-Dfile.encoding=UTF-8`,以确保所有Java应用都以UTF-8编码运行。 四、模板文件问题 5. **模板文件编码**:检查报表模板`.jrxml`文件的编码...
- 将UTF-8编码的字节数组转换为Unicode字符串:`byte[] utf8s = {0xe4, 0xb8, 0xad, 0xe6, 0x96, 0x87}; String s = new String(utf8s, "UTF-8");` - **Unicode与ISO-8859-1之间的转换**: - 由于ISO-8859-1编码...