URLEncodedUtils.parse()处理中文有错误?

u010630804 2014-01-07 05:27:50
相关代码如下
    private static String urlDecode(
final String content,
final Charset charset,
final boolean plusAsBlank) {
if (content == null) {
return null;
}
final ByteBuffer bb = ByteBuffer.allocate(content.length());
final CharBuffer cb = CharBuffer.wrap(content);
while (cb.hasRemaining()) {
final char c = cb.get();
if (c == '%' && cb.remaining() >= 2) {
final char uc = cb.get();
final char lc = cb.get();
final int u = Character.digit(uc, 16);
final int l = Character.digit(lc, 16);
if (u != -1 && l != -1) {
bb.put((byte) ((u << 4) + l));
} else {
bb.put((byte) '%');
bb.put((byte) uc);
bb.put((byte) lc);
}
} else if (plusAsBlank && c == '+') {
bb.put((byte) ' ');
} else {
bb.put((byte) c);
}
}
bb.flip();
return charset.decode(bb).toString();
}

11行获取从QueryString中获取一个字符,在java中,这可能是一个Unicode多字节字符。在27行,把这个字符强制转换成byte,就丢字节了。
偏偏这个方法就是用来做字符集转码的。会犯这么低级的错误吗?请高手讲讲
...全文
1242 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这就是盲目问问题的例子。
u010630804 2014-01-07
  • 打赏
  • 举报
回复
好吧,我理解了。 这个方法要求参数是已经URL编码的串,也就是说汉字已经转换成了%XX,直接出现的汉字应该不在考虑范围。

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧