项目中经常用到前台传中文参数的问题,传中文很容易乱码,如果是form表单post提交,就不用考虑这些问题,但是有些情况不适宜使用form表单,一般都是js中将中文进行编码,但是在后台如何解码,这就存在一些差异性了。前台肯定需要将中文encodeURIComponent,但后台如何解码呢?
分析情况,有如下几种转码:
1、
public staticString getRealString(String input) throws UnsupportedEncodingException{ input = new String(input.getBytes("iso8859-1"),input); return input; }
2、
public staticString getRealString1(String input) throwsUnsupportedEncodingException{ input = java.net.URLDecoder.decode(input, "UTF-8"); return input; }
以上两种解码方式,根据线上环境不同,从而可能能正常解码,可能解析完仍然乱码,这就跟线上服务器环境有关系啦,如果服务器进行一次转码,以上方式再进行转码,肯定仍然是乱的,还有记得在大于号项目中,如果是异步跨域的请求,后台必须用第二种方式解码。总之要依赖服务器环境,有没有特定的解码方案呢,答案是,有的。
3、
public staticString decodeURIComponent(String encodedURI) { char actualChar; StringBuffer buffer = new StringBuffer(); int bytePattern, sumb = 0; for (int i =0, more = -1; i < encodedURI.length(); i++) { actualChar = encodedURI.charAt(i); switch (actualChar) { case'%': { actualChar = encodedURI.charAt(++i); int hb = (Character.isDigit(actualChar)? actualChar -'0' : 10 + Character.toLowerCase(actualChar) - 'a')& 0xF; actualChar = encodedURI.charAt(++i); int lb = (Character.isDigit(actualChar)? actualChar -'0' : 10 + Character.toLowerCase(actualChar) - 'a')& 0xF; bytePattern = (hb << 4) | lb; break; } case'+': { bytePattern = ' '; break; } default: { bytePattern = actualChar; } } if ((bytePattern & 0xc0) == 0x80) {//10xxxxxx sumb = (sumb << 6) | (bytePattern & 0x3f); if (--more == 0) buffer.append((char) sumb); } else if((bytePattern & 0x80) == 0x00) { // 0xxxxxxx buffer.append((char) bytePattern); } else if((bytePattern & 0xe0) == 0xc0) { // 110xxxxx sumb = bytePattern & 0x1f; more = 1; } else if((bytePattern & 0xf0) == 0xe0) { // 1110xxxx sumb = bytePattern & 0x0f; more = 2; } else if((bytePattern & 0xf8) == 0xf0) { // 11110xxx sumb = bytePattern & 0x07; more = 3; } else if((bytePattern & 0xfc) == 0xf8) { // 111110xx sumb = bytePattern & 0x03; more = 4; } else {// 1111110x sumb = bytePattern & 0x01; more = 5; } } return buffer.toString(); }
此种解码方式,不依赖于服务器环境,至少在编年史项目中,我最后采用这种方式解码,完全没有问题,大家也可以在项目中试试。
相关推荐
同学的毕业设计出现JavaScript用encodeURIComponentt编码后无法再后台解码的问题。 原来他是这样写的: window.self.location="searchbytext.action?searchtext="+encodeURIComponent(seartext);
UHF RFID中曼彻斯特及FM0编解码解决方案中包含多篇关于Manchester和FM0编解码的文章。
使用方法:utf8to16(base64decode(你的加密字符串));
航信汉字的编码与解码,编码便于使自己的pid进行汉字传输, 航信汉字编码与解码,eterm汉字编码与解码,汉字编码问题
Helix MP3解码库脱离汇编指令束缚,运行在任何处理器上的解决方案
文件仅包含解决方案和流程,并非现成的代码,且方案为FPGA硬件实现H.264的方案,并非DSP等,具有一定的参考价值
使用户ffmpeg拉流,NVIDIA显卡进行视频硬解码,opengl做视频帧显示的硬解码demo
完全开源的二维码编码,解码,支持中文二维码噢.亲.
H264编解码\嵌入式系统设计和网络摄像机解决方案的论文研究
完美支持中文 base64 编码与解码 目前速度最快 效率最高的编码与解码
网络NVR解码器解决方案.doc
通过URLEncoder.encode加密地址栏url上得中文字符, 并可通过java.net.URLDecoder.decode(str, charset)解密中文
1. 汉字乱码 2. 空格变成 + 号 本资源演示Delphi代码,实现javascript能正确进行Base64解码,不出现上述2个问题。 解决思路:进行Base64前先进行URL编码,在进行URL编码的时候,注意设置不需要SpaceAsPlus选项。 ...
在做java项目(特别是web项目)的过程中,中文乱码一直是我们开发人员比较头疼的问题,因为涉及到编码,解码,字符集,以及国际化等诸多问题,所以在着手解决的时候也缺乏相关的知识。我花了一些时间自己动手实验了...
pdf中文解码器解决不能打印的麻烦,太好了。
JSP中文解码方法
网络+NVR+解码器解决方案.doc
**H.264视频编解码在Android项目中的应用** 随着移动设备的普及和多媒体技术的发展,视频编解码...总之,本资源为您提供了一个高效、稳定、易用的H.264视频编解码解决方案,助您在Android项目中实现卓越的多媒体体验。
网络+NVR+解码器解决方案设计.docx
网络+NVR+解码器解决方案设计.doc