如标题写了一个测试demo:
运行结果:
-28-67-96-27-91-67
%E4%BD%A0%E5%A5%BD
很奇怪为什么都是用UTF-8编码返回字节,但返回的十六进制为什么不同呢?
a.getBytes("utf-8")
返回的是以utf-8编码的字节数组,也就是英文字母数字符号一个字节,汉字三个字节,所以说“你好”也就转换为六个字节,在这里也就表示为六个数字。
而URLEncoder.encode(a, "utf-8")
返回的是使用utf-8编码的application/x-www-form-urlencoded
格式的字符串,具体的转换规则可以查javadoc,总体来说一个中文字符转换为三个%xy,xy为一个字节的utf-8编码。
这里的-28也就是E4的10进制表示,后面的10进制数字也与16进制数一一对应。
a.getBytes('utf-8') 若a字符串为中文的时候,因为utf-8的中文是3字节,所以一个中文字会输出3个ascii码。“你好”两个中文
字,输出6个ascii码a.getBytes('GB2312')
若a字符串为中文的时候,因为gb2312的中文是2字节,所以一个中文字会输出2个ascii码。“你好”两个中文字,输出4个ascii码
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。