javaurl转码
① java 中如何在 url 字符串找出中文字进行转码
url 中包含 “:、/” 是用来干嘛的? 路径?
如果有变量的话,建议还是单独来转码,不要放进url然后把url全部转码。
② java web程序路径url URLEncoder.encode转码为什么用GBK
通常情况下是不需要转的,但有时候碰到一些get请求,路径上带中文件参数的,这就要转了,这是IE机制的问题,转一下比较保险
③ 为什么要对url进行encode
.encodeURL函数主要是来对URI来做转码,它默认是采用的UTF-8的编码.
. UTF-8编码的格式:一个汉字来三个字节构成,每一个字节会转换成16进制的编码,同时添加上%号.
假设页面端输入的中文是一个逗中地,按照下面步骤进行解码
1.第一次encodeURI,按照utf-8方式获取字节数组变成[-28,-72-83],对字节码数组进行遍历,把每个字节转化成对应的16进制数,这样就变成了[E4,B8,AD],最后变成[%E4,%B8,%AD] 此时已经没有了多字节字符,全部是单字节字符。
2、第二次encodeURI,进行编码,会把%看成一个转义字符,并不编码%以后字符,会把%编码成%25.把数组最后变成[%25E4,%25B8,%25AD]然后就把处理后的数据[%25E4,%25B8,%25AD]发往服务器端,
当应用服务器调用getParameter方法,getParameter方法会去向应用服务器请求参数
应用服务器最初获得的就是发送来的[%25E4,%25B8,%25AD],应用服务器会对这个数据进行URLdecode操作,应用服务器进行解码的这一次,不管是按照UTF-8,还是GBK,还是ISO-8859,,都能得到[%E4,%B8,%AD],因为都会把%25解析成%.并把这个值返回给getParameter方法
3\、再用UTF-8解码一次,就得到"中"了。
想想看,如果不编码两次,当服务器自动解码的时候,假如是按照ISO-8859去解码UTF-8编码的东西,就是会出现乱码。
JS:
[sql] view plain
document.authorityForm.action = basePath3+"User_viewUser.do?id="+id+"&roleName="+encodeURI(encodeURI(roleName))+"&roleType="+roleType;
Java后台:
[sql] view plain
roleName = java.net.URLDecoder.decode(getRequest().getParameter("roleName"),"UTF-8");
④ java url中文转码问题
你这是从Servlet中取参然后在界面显示是吧,JSP这个你设置的没:<%@page pageEncoding="utf-8" contentType="utf-8" %>
以及request,response的设置:
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
⑤ java url中有中文 传到后台有乱码 怎么改 乱码是
你这个问题真心不好办,建议你把页面编码改为GBK编码把。像楼上说的这些方法看似行得通,原理就是把utf-8转为gbk然后再转回utf-8,但那样是不能解决问题的,试图通过String newStr = new String(str.getBytes("gbk","utf-8"));办不到的,结果是中文字符为奇数会出现最后一个字乱码。我以前也曾碰到这个情况,最后还是把页面统一编码解决。
⑥ URL中的特殊字符
问题场景:
经过Base64转码后的字符串常常包含“+”号,拼接为URL(如param1= test+1 )后,服务端获取到的值是错误的(通过reuqest.getParameter("param1")得到 test 1 )。
错误原因:
“+”在URL中是特殊字符,特殊字符在URL中不能直接传递,使用的话需要使用它们的编码。
编码的规则是前面一个百分号%,后面是对应字符的ASCII(16进制)码值。例如空格的编码值是"%20"。以下为url的特殊字符和它们的特殊含义以及对应编码。
1) + URL 中+号表示空格 %2B
2) 空格 URL中的空格可以用+号或者编码 %20
3) / 分隔目录和子目录 %2F
4) ? 分隔实际的 URL 和参数 %3F
5) % 指定特殊字符 %25
6) # 表示书签 %23
7) & URL 中指定的参数间的分隔符 %26
8) = URL 中指定参数的值 %3D
解决办法:
a. 修改客户端,将客户端带“+”的参数中的“+”全部替换为?“2B%”,这样参数传到服务器端时就能得到“+”了。
b. 修改服务器端,将空格替换为“+”,这种方式只适用于参数中有?“+”没有空格的情况。
备注:
js中使用encodeURIComponent和decodeURIComponent进行特殊字符的编码和解码。
java中使用 URLEncoder.encode和URLDecoder.decode进行特殊字符的编码和解码。
⑦ java转码后局部乱码问题
问题给你解决了,看代码
public class Test {
public static void main(String[] args) {
try {
String s = new String("中文测试局部乱码问题2011中文测试上传文件名乱码问题.txt".getBytes(),
"UTF-8");
System.out.println(s);
s = java.net.URLDecoder.decode(s, "utf-8"); //utf8转gbk
System.out.println(s);
Test convert = new Test();
byte[] fullByte = convert.gbk2utf8(s); //gbk转utf8
String fullStr = new String(fullByte, "UTF-8");
System.out.println("string from GBK to UTF-8 byte: " + fullStr);
} catch (Exception e) {
e.printStackTrace();
}
}
public byte[] gbk2utf8(String chenese) {
char c[] = chenese.toCharArray();
byte[] fullByte = new byte[3 * c.length];
for (int i = 0; i < c.length; i++) {
int m = (int) c[i];
String word = Integer.toBinaryString(m);
StringBuffer sb = new StringBuffer();
int len = 16 - word.length();
for (int j = 0; j < len; j++) {
sb.append("0");
}
sb.append(word);
sb.insert(0, "1110");
sb.insert(8, "10");
sb.insert(16, "10");
String s1 = sb.substring(0, 8);
String s2 = sb.substring(8, 16);
String s3 = sb.substring(16);
byte b0 = Integer.valueOf(s1, 2).byteValue();
byte b1 = Integer.valueOf(s2, 2).byteValue();
byte b2 = Integer.valueOf(s3, 2).byteValue();
byte[] bf = new byte[3];
bf[0] = b0;
fullByte[i * 3] = bf[0];
bf[1] = b1;
fullByte[i * 3 + 1] = bf[1];
bf[2] = b2;
fullByte[i * 3 + 2] = bf[2];
}
return fullByte;
}
}
结果:
中文测试局部乱码问题2011中文测试上传文件名乱码问题.txt
中文测试局部乱码问题2011中文测试上传文件名乱码问题.txt
string from GBK to UTF-8 byte: 中文测试局部乱码问题2011中文测试上传文件名乱码问题.txt
⑧ JAVA URLDecoder.decode转码失败怎么解决
编码:java.net.URLEncoder.encode("测试","UTF-8");解码:java.net.URLDecoder.decode("%E6%B5%8B%E8%AF%95%26%3Faaa","UTF-8");
⑨ http请求特殊字符转码
Java 使用URLEncoder.encode和URLDecoder.decode编解码(utf-8)中文及特殊字符
1、URLEncoder.encode和URLDecoder.decode
URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号,即
只有字母和数字[0-9a-zA-Z]、一些特殊符号$-_.+!*'()[不包括双引号]、以及某些保留字(空格转换为+),才可以不经过编码直接用于URL,如果URL中有汉字,就必须编码后使用。
URLDecoder类包含一个decode(String s,String enc)静态方法,它可以将application/x-www-form-urlencoded MIME字符串转成编码前的字符串;
URLEncoder类包含一个encode(String s,String enc)静态方法,它可以将中文字符及特殊字符用转换成application/x-www-form-urlencoded MIME字符串。
2、使用URLEncoder.encode编码
publicstaticStringurlEncode(String urlToken){
String encoded =null;
try{//用URLEncoder.encode方法会把空格变成加号(+),encode之后在替换一下
encoded = URLEncoder.encode(urlToken,"UTF-8").replace("+","%20");
}catch(UnsupportedEncodingException e) {
logger.error("URLEncode error {}", e);
}
returnencoded;
}
3、使用URLEncoder.encode解码
publicstaticStringurlEncode(String urlToken){
String decoded =null;
try{
decoded =URLDecoder.decode(urlToken,"UTF-8");
}catch(UnsupportedEncodingException e) {
logger.error("URLEncode error {}", e);
}
returndecoded;
}
⑩ 用url传汉字转码问题传中文就报错该怎转码啊
String s ="dfdf东方时代";
s=new String(s.getBytes("urf-8"),"iso-8859-1");
//2
s=java.net.URLEncoder.encode.decode(s,"utf-8");