关于页面中文的处理及特殊字符(中文乱码)的处理

1、页面在url参数中向后台传输中文,会导致乱码的处理方法:

String name = new String(name.getBytes("iso-8859-1"),"utf-8");

    如果页面上传的中文有特殊字符时:

 <a href='xx.acion?CategoryName=encodeURIComponent("Visual C++")' > 


2、图片名为中文,需要在页面显示
在tomcat/conf/server.xml中

<Connector port="80" protocol="HTTP/1.1" URIEncoding="utf-8" maxThreads="150" connectionTimeout="20000" redirectPort="8443" />

3、在类中用Url方法

String url =encodeURL(url,"UTF-8");
public static String encodeURL(String url,String encode)   
            throws UnsupportedEncodingException {   
        StringBuilder sb = new StringBuilder();   
        StringBuilder noAsciiPart = new StringBuilder();   
        for (int i = 0; i < url.length(); i++) {   
            char c = url.charAt(i);   
            if (c > 255) {   
                noAsciiPart.append(c);   
            } else {   
                if (noAsciiPart.length() != 0) {   
                    sb.append(URLEncoder.encode(noAsciiPart.toString(),encode));   
                    noAsciiPart.delete(0, noAsciiPart.length());   
                }   
                sb.append(c);   
            }   
        }   
        return sb.toString();   
    }
String input = "http://www.nn.com/" + "query?
pg=q&kl=XX&stype=stext&q=%2B%22Java+I%2FO%22&search.x=38&search.y=3";
  try {
  String output = URLDecoder.decode(input, "UTF-8");
  System.out.println(output);
  }

http://tech.sina.com.cn/s/2008-07-07/1053722241.shtml

Js字符集编码转换函数
字符集转换:
4.ajax get请求的字符集乱码解决方案,发送端数据用reCode()方法编码加密,接收端用deCode()方法解码。
function reCode(str) { return encodeURIComponent(encodeURIComponent(str)); }
function deCode(str) { return decodeURIComponent(decodeURIComponent(str)); }

5.js-get请求特殊字符不可见问题(如‘+’号等):
location.href="url"+encodeURIComponent(str);

6.字符集转换函数:

对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent

escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。
encodeURI() 方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串
encodeURIComponent,最多使用,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同)

escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
/******************************
今天为这个东西搞了半天,记载下,上面的仅做参考吧,
以下是js中get方式传值特殊字符的处理:
*************************jsp之间:*********************************
/*
*js Unicode编码转换
*/
var decToHex = function(str) {
var res=[];
for(var i=0;i < str.length;i++)
res[i]=("00"+str.charCodeAt(i).toString(16)).slice(-4);
return "\\u"+res.join("\\u");
}

var decToHex2 = function(str) {
var res="",c;
for(var i=0;i < str.length;i++){
c=str.charCodeAt(i);
res+=(c< 32 || c==38 || c>127)?"\\u"+c.toString(16):str.charAt(i)
}
return res;
}

var hexToDec = function(str) {
str=str.replace(/\\/g,"+");
return unescape(str);
}

//var str=decToHex("decToHex unicode 编码转换");
//alert("编码后:"+str+"\n\n解码后:"+hexToDec(str));
************jsp与java:**************************************

var src = "dispatcher.jsp?requestUrl=storage/temporaryConv_confirmConversion.action&tmaterielId="+tmaterielId+"&materielId="+materielId+"&tmaterielName="+decToHex(tmaterielName)+"&materielName="+decToHex(materielName);

java中:
Unicode2GBK(tmaterielName);
/**
* 用于AJAX传来的中文参数unicode解码
* @param dataStr
* @return
*/
public static String Unicode2GBK(String dataStr) {
if (dataStr == null || "".equals(dataStr)) {
return dataStr;
}
int index = 0;

StringBuffer buffer = new StringBuffer();

while (index < dataStr.length()) {
try {
if (!"\\u".equals(dataStr.substring(index, index + 2))) {
buffer.append(dataStr.charAt(index));
index++;
continue;
}
} catch (Exception e) {

for (int j = index; j < dataStr.length(); j++) {
buffer.append(dataStr.charAt(index));
}
return buffer.toString();
}
String charStr = "";
charStr = dataStr.substring(index + 2, index + 6);
char letter = (char) Integer.parseInt(charStr, 16);
buffer.append(letter);
index += 6;
}

return buffer.toString();

}

7、jdk zipEntry 压缩中文文件名乱码

上网查了下,有两种方法,一种修改jdk ZipInputStream及ZipOutputStream 的源文件,比较麻烦,不建议此项.

  第二种 就是拿来主义,因为 开源项目 Ant 里已经有现成的实现.把ant.jar 加入到 工程下的lib目录即可.

  如果仅用到压缩,就加入ant.jar 就导致引入了一些不必要的文件,所以我找到Ant1.8的源码,然后只把需要的那一部分编译打包成了一个jar文件,供大家使用

import org.apache.tools.zip.ZipEntry;

import org.apache.tools.zip.ZipOutputStream;

zos = new ZipOutputStream(new FileOutputStream(zipname));
FileInputStream fis = new FileInputStream(file);
ZipEntry ze = new ZipEntry(file.getName());
ze.setSize(file.length());
ze.setTime(file.lastModified());
zos.putNextEntry(ze);       
zos.setEncoding("gbk");

猜你喜欢

转载自duanfei.iteye.com/blog/1042719
今日推荐