同一编码方式的URLEncode.encode()方法与getBytes()方法返回的十六进制不同?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

同一编码方式的URLEncode.encode()方法与getBytes()方法返回的十六进制不同?

2016-03-20 14:35:55 2451 2

如标题写了一个测试demo:
screenshot
运行结果:
-28-67-96-27-91-67
%E4%BD%A0%E5%A5%BD
很奇怪为什么都是用UTF-8编码返回字节,但返回的十六进制为什么不同呢?

取消 提交回答
全部回答(2)
  • 大枣
    2019-07-17 19:09:41

    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进制数一一对应。

    0 0
  • 蛮大人123
    2019-07-17 19:09:41

    a.getBytes('utf-8') 若a字符串为中文的时候,因为utf-8的中文是3字节,所以一个中文字会输出3个ascii码。“你好”两个中文字,输出6个ascii码
    a.getBytes('GB2312') 若a字符串为中文的时候,因为gb2312的中文是2字节,所以一个中文字会输出2个ascii码。“你好”两个中文字,输出4个ascii码

    0 0
添加回答
+关注
蛮大人123
我说我不帅他们就打我,还说我虚伪
0
文章
7733
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载