`
sngg_yang
  • 浏览: 32350 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

一个将浏览器可以自动编解码的类似 &#nnnnn;的字元 与中文互相转换的类

阅读更多

用一段时间在使用JSF的时候发现了这样一个问题,在用链接传递带中文的参数时,接收时会得到类似 &#nnnnn;的字元, java无法解析和使用,这两天有时间研究了一下,发现只有在使用myfaces 1.1.3 时的时候才会有这个问题,而&#nnnnn; 中的n 其实是中文的unicode 码的十进制,我参考了些资料,写了个转换的类请大家指教

/***//**
*将中文转成浏览器可以自动编解码的
*类似&#nnnnn;的字元
*
*/


publicstaticStringgb2Unicode(Strings)...{
StringBufferretstr
=newStringBuffer();

for(inti=0;i<s.length();i++)...{
charc=s.charAt(i);
if(c>=0&&c<=255)...{
retstr.append(c);
}
else...{
retstr.append(
"&#").append(Integer.toString(s.charAt(i))).append(";");
}

}

returnretstr.toString();
}

/**//*
*将浏览器可以自动编解码的类似&#nnnnn;的字元转成中文的
*例如:"&#22522;&#37329;"得到的中文字为"基金"
*/

publicstaticStringunicode2Gb(Strings)...{
StringBufferretstr
=newStringBuffer();
StringregEx
="^&#\d{5};$";
Patternp
=Pattern.compile(regEx);
for(inti=0;i<s.length();)...{
if(s.charAt(i)=='&')...{
Stringtmp
=s.substring(i,i+8);
Matcherm
=p.matcher(tmp);
if(m.find())...{
intj=Integer.parseInt(tmp.substring(2,7));
retstr.append((
char)j);
i
+=8;
}
else...{
retstr.append(s.charAt(i));
i
++;
}

}
else...{
retstr.append(s.charAt(i));
i
++;
}


}

returnretstr.toString();

}


/**//*
*将unicode码转成中文的
*例如:"䟺"得到的中文字为"基"
*/

publicstaticStringconvert(Stringsource)...{
if(null==source||"".equals(source))...{
returnsource;
}


StringBuffersb
=newStringBuffer();
inti=0;
while(i<source.length())...{
if(source.charAt(i)=='\')...{
System.out.println(source.substring(i
+2,i+6));
intj=Integer.parseInt(source.substring(i+2,i+6),16);
sb.append((
char)j);
i
+=6;
}
else...{
sb.append(source.charAt(i));
i
++;
}

}

returnsb.toString();
}


/***//**
*
*测试方法
*/


publicstaticvoidmain(String[]args)throwsUnsupportedEncodingException...{
Stringji
="基金宝典";
Stringuji
=gb2Unicode(ji);
System.out.println(uji);
System.out.println(unicode2Gb(uji));

}

最近在网上发现有人解决相同的问题而且很高效,不过使用ASP,引用一下供参考

问题:

请教一个问题。如附件的图片所示,写一个字符串作为html的源文件,内容是&#21553;&#21554;,在IE上打开网页会自动显示为汉字:“吱吲”

这是因为IE会自动把
&#21553;&#21554;转换为汉字显示。


我的问题是,如何高效地做一个反过程?比如给一个字符串“吱吲”,要转换为:
&#21553;&#21554;



在asp和javascript中其实都很容易可以实现,asp用ascW(),java用charCodeAt(),得到一个字符的ascii编码,然后根据字符串长度给一个循环就搞定了。



但是问题来了,如果给的字符串不仅仅是“吱吲”,而是一篇有几万字的文章,也就是说转换编码的时候要运行几万次循环。



请帮忙看看有没有什么高效的方法可以不使用循环就把字符串转为
&#xxxxx;的格式?不知道asp/javascript有没有相关的函数?就好比如IE浏览器可以很快就加载上万字的&#xxxxx;格式的内容而不占多少CPU。
回答:

已经自己搞定了!用escape函数转换,然后把&u替换为&#X即可。这样就可以不使用到循环了。测试转换1万个字还没有用1秒钟,以前要用3分钟。


贴出代码给大家分享!这是实现NCR编码的方式,可以保证在任何网页编码中都正常显示字符而不会乱码!
这个效率应该是最高了,实际测试转换一篇几万字的文章还不用1秒。而以前用循环的方式来做,少则要几分钟,经常导致服务器死机!

顺便推荐一下我制作的手机新闻网站3g网(3gONE.net),你可以用手机来浏览csdn、各种分类新闻啦,如果你用PDA的话,还可以离线浏览新闻资讯呢!
请大家多提提建议!

unctionNCR_CODE(str)
'

str
=escape(str)

DimobjRegExp,Match,Matches
SetobjRegExp
=NewRegexp
objRegExp.IgnoreCase
=True
objRegExp.Global
=True

objRegExp.Pattern
="%u([0-f][0-f][0-f][0-f])"
str
=objRegExp.Replace(str,"#&x$1;")

objRegExp.Pattern
="%([0-f][0-f])"
NCR_CODE
=objRegExp.Replace(str,"#&x$1;")

endfunction


分享到:
评论

相关推荐

    IP地址分类(IPV4、IPV6)

    但有一类 IP 地址是不用申请可直接用于企业内部网的,这就是 Private Address,Private Address 不会被 INTERNET 上的任何路由器转发,欲接入 INTERNET 必须要通过 NAT/PAT 转换,以公有 IP 的形式接入。 Private ...

    ASP源码—网址在线加密解密,网址加密解密方法及工具.zip

    在ASP中,URL编码通常使用`Server.URLEncode()`函数来实现,它可以将URL中的特殊字符转换为百分号编码,避免在传输过程中引起解析错误。例如,空格会被转换为"%20"。相反,解码则使用`Server.URLDecode()`函数,将...

    pcl的多点云加载与显示

    ### PCL多点云加载与显示技术解析 #### 概述 点云处理在计算机视觉、机器人技术以及三维建模领域扮演着极其重要的角色。PCL(Point Cloud Library)作为一个强大的开源库,提供了丰富的工具来处理点云数据,包括...

    C 语言程序设计:递归与分治策略.ppt

    合并排序将一个大数组分解成多个小数组,并对每个小数组进行排序,然后将这些小数组合并成一个大数组。快速排序将一个大数组分解成多个小数组,并对每个小数组进行排序,然后将这些小数组合并成一个大数组。 递归和...

    IE7.0 cpu占用过大补丁

    标题中的“IE7.0 CPU占用过大补丁”指的是针对Internet Explorer 7.0浏览器的一个问题,即在使用过程中,浏览器可能会导致计算机的中央处理器(CPU)占用率过高,从而影响系统的性能和响应速度。这可能由多种原因...

    数控系统840d报警文本教程

    其中,报警号是一个唯一的标识符,显示方式可以选择在报警行显示报警或对话框形式显示报警,帮助代码是系统显示的帮助信息,报警文本是报警的具体信息。 在PCU50系统中,报警文本可以直接在操作面板上编写,也可以...

    IP地址子网划分VLSM与CIDR介绍.pdf

    IP地址子网划分VLSM与CIDR介绍 IP地址子网划分VLSM与CIDR是计算机网络中的一种关键技术,旨在提高网络资源的利用率和网络的可扩展性。本章节将详细介绍IP地址分类、子网掩码、VLSM和CIDR的概念,并解释它们在网络中...

    Program mirovanie_na_Python,_Tom

    根据提供的文件信息,本书《程序设计于Python》第四版由马克·卢茨撰写,是关于Python编程语言在系统管理、图形界面开发与Web应用领域的深入探讨。本书特别聚焦于使用Python来解决实际问题的方法和技术,而不仅仅...

    nnnnnnnnnn:一个js表单验证库

    easyform 是一个jQuery插件,包括easyfrom,easytip,两个部分。 easyform是表单验证插件,支持复杂的表单验证规则,并且使用简单。甚至可以做到1行js搞定全部。 目前支持的控件有:input[text,radio,checkbox],...

    IP地址子网划分VLSM与CIDR介绍.pptx

    IP 地址子网划分 VLSM 与 CIDR 介绍 本文旨在介绍 IP 地址子网划分的概念和技术,包括 VLSM 和 CIDR 的概念,以及 IP 地址分类、子网掩码的作用、网络标识号、主机标识号、子网的数目、主机的数目等。 一、IP 地址...

    多线程socket文件传输

    2 每个Socket连接同时只能够传输一个文件。 3 可同时发送网络消息 网络消息的消息格式为: @+nnnnn+消息内容,其中@为消息头,nnnnn为消息内容的长度。 下载后,别忘了给自己把分挣回来哦,挣回步骤:...

    前端canvas案例,减速下落的物体。htm+js双击浏览器打开即可看效果

    内容概要:canvas案例,减速下落的物体。 实现技术:htm+js实现。双击浏览器打开即可看效果 能学到什么:canvas技术 适用人群: 前端canvas学习新手 阅读建议:支持canvas的浏览器

    IOnosfera v6(1)_IOnosferav6_OPTION_Ionosfera_

    【标题】"IOnosfera v6(1)_IOnosferav6_OPTION_Ionosfera_" 提示我们正在处理一个名为"IOnosfera"的软件或应用程序的第六个版本,其中可能包含一个特定的选项或扩展,这里标记为"OPTION"。这个版本可能是针对特定...

    前端canvas案例,色盘、颜色过渡。htm+js实现。双击浏览器打开即可看效果

    内容概要:canvas案例,色盘、颜色过渡。 实现技术:htm+js实现。双击浏览器打开即可看效果 能学到什么:canvas技术 适用人群: 前端canvas学习新手 阅读建议:支持canvas的浏览器

    前端canvas案例,弹性小球下落实现。htm+js实现。双击浏览器打开即可看效果

    内容概要:canvas案例,弹性小球下落实现。(弹跳效果) 实现技术:htm+js实现。双击浏览器打开即可看效果 能学到什么:canvas技术 适用人群: 前端canvas学习新手 阅读建议:支持canvas的浏览器

    玩具物料编码知识培训教材.doc

    7. 生产批号:分为订单生产类和连续生产类,便于追踪每个批次的生产状况,控制产品质量。 8. 制令单号:涵盖采购单号、外发单号和自制单号,是生产计划和调度的基础。 9. 资材异动单号:涉及进料、验收、退料、发...

    前端canvas案例,检测碰撞、检测运动物体是否碰撞。htm+js实现。双击浏览器打开即可看效果

    内容概要:canvas案例,检测碰撞、检测运动物体是否碰撞。 实现技术:htm+js实现。双击浏览器打开即可看效果 能学到什么:canvas技术 适用人群: 前端canvas学习新手 阅读建议:支持canvas的浏览器

    前端canvas案例,闪烁的物体、缩放物体实现闪烁。htm+js实现。双击浏览器打开即可看效果

    内容概要:canvas案例,闪烁的物体、缩放物体实现闪烁。 实现技术:htm+js实现。双击浏览器打开即可看效果 能学到什么:canvas技术 适用人群: 前端canvas学习新手 阅读建议:支持canvas的浏览器

    Hadoop MapReduce多输出详细介绍

    以性别区分度假订单数据的需求为例,开发者可以编写一个MapReduce作业,其中Map任务负责读取原始数据并将其按照性别分类标记,然后发送到不同的Reducer。Reducer随后根据这些标记将数据写入不同的输出文件中,例如一...

Global site tag (gtag.js) - Google Analytics