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

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

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


public static Stringgb2Unicode(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;"得到的中文字为"基金"
*/

public static Stringunicode2Gb(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码转成中文的
*例如:"䟺"得到的中文字为"基"
*/

public static Stringconvert(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();
}


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


public static void main(String[]args) throws UnsupportedEncodingException ... {
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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据你提供的错误信息和引用内容,"FileNotFoundException: Could not find file "D:\GuangZhou\nnnnn\GuangzNewBig\BigScreenDisplay\Assets\玩手机1",我们可以推断出这个错误是由于缺少指定文件导致的。具体地,系统在给定路径下找不到名为"玩手机1"的文件。 解决这个问题的方法有几种。首先,你可以检查文件路径是否正确,并确保文件确实存在于该路径下。如果文件路径正确且文件确实存在,那么可能是由于文件被其他程序占用或权限问题导致无法访问。你可以尝试关闭其他可能占用该文件的程序,并检查你对该文件是否有足够的访问权限。 另外,根据引用所述,有时候这个问题可能是由于缺少某个程序包导致的。你可以尝试下载和安装名为"Portable.BouncyCastle"的程序包,看看是否能够解决该问题。 总结起来,要解决"FileNotFoundException: Could not find file "D:\GuangZhou\nnnnn\GuangzNewBig\BigScreenDisplay\Assets\玩手机1"这个问题,你可以检查文件路径是否正确,确保文件存在并且没有被其他程序占用,以及尝试下载并安装所需的程序包。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C# DLL异常System.IO.FileNotFoundException:Could not load file orassembly BouncyCastle.Crypto系统找不...](https://blog.csdn.net/an_Session/article/details/117927092)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [解决异常FileNotFoundException:class path resource找不到资源文件的问题](https://download.csdn.net/download/weixin_38708461/12753385)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值