开发者社区> 问答> 正文

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

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

展开
收起
蛮大人123 2016-03-20 14:35:55 3430 0
2 条回答
写回答
取消 提交回答
  • 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进制数一一对应。

    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码

    2019-07-17 19:09:41
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载