utf-8编码问题之urlencode和getbytes得到的utf-8区别验证测试
来源:互联网 发布:怎么做淘宝客赚佣金 编辑:程序博客网 时间:2024/05/10 05:32
上个星期又发生了一起编码问题引起的bug,继续研究。其中涉及URLEncode对字符串进行utf-8编码和getbytes对字符串进行utf-8编码的区别。
详细研究结论如下
首先utf-8编码的中文是采用三个字节一个中文来存储的。
验证代码如下
String msg = "中国";
System.out.println(msg.getBytes("utf-8").length);
打印出:6
采用URLEncode来打印msg
System.out.println(URLEncoder.encode(msg,"utf-8"));
打印出:
%E4%B8%AD%E5%9B%BD
我们希望通过验证getbytes得到utf-8和URLEncodeer得到utf-8是一致的代码如下
String xyz="中";
String xyg="国";
System.out.println(Integer.toHexString(0xff & xyz.getBytes("utf-8")[0]));
System.out.println(Integer.toHexString(0xff & xyz.getBytes("utf-8")[1]));
System.out.println(Integer.toHexString(0xff & xyz.getBytes("utf-8")[2]));
System.out.println(Integer.toHexString(0xff & xyg.getBytes("utf-8")[0]));
System.out.println(Integer.toHexString(0xff & xyg.getBytes("utf-8")[1]));
System.out.println(Integer.toHexString(0xff & xyg.getBytes("utf-8")[2]));
打印出:
e4
b8
ad
e5
9b
bd
是否证明两者是相同的,答案是否定的
因为URLEncode还会做一些特殊处理,对一些特殊字符串
String xys = " ";
System.out.println(URLEncoder.encode(xys ,"utf-8"));
打印出:"+"
System.out.println(Integer.toHexString(0xff & xys.getBytes("utf-8")[0]));
打印出:"20"
对于普通英文,两者也是一致的。
- utf-8编码问题之urlencode和getbytes得到的utf-8区别验证测试
- utf-8编码问题之urlencode和getbytes得到的utf-8区别验证测试
- iOS utf-8和urlEncode的区别
- gb2312和utf-8下的UrlEncode()
- utf-8 和gbk编码的区别
- UTF-8 和 GBK 编码的区别
- delphi GBK 以UTF-8的格式URLENCODE编码
- GBK编码和UTF-8编码的区别
- C#文本文件编码问题,区别UTF-8和GB2312
- UTF-8编码问题
- 编码之UTF-8
- 教你轻松解决IIS+Asp中UrlEncode的utf-8和gb2312的问题
- JAVA 编码之 ASCII、Unicode、GBK和UTF-8字符编码的区别联系
- 中文字符编码之GBK,UTF-16和UTF-8
- 中文字符编码之GBK,UTF-16和UTF-8
- 中文字符编码之GBK,UTF-16和UTF-8
- 中文字符编码之GBK,UTF-16和UTF-8
- utf-8 和gbk 编码区别
- HPUX 配置NTP
- Vi 教程(Unix行编辑器)
- SetWindowLong和SetWindowPos函数详解
- c++构造函数初始化列表使用
- 攀比的虚荣之心不可有
- utf-8编码问题之urlencode和getbytes得到的utf-8区别验证测试
- linux入门手记
- 什么?
- 我的博客开通了
- firefox 插件
- 掌握 Linux 调试技术
- c#listview常用的方法
- D-Link 路由 PCAnyWhere 端口映射
- DDOS防御,注册表设置大全