From 783a02cce4b037db90fb68eab0fcbd044642a670 Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 10 Sep 2021 19:51:46 +0800 Subject: [PATCH] fix bu --- CHANGELOG.md | 1 + .../java/cn/hutool/core/util/EscapeUtil.java | 20 +++++++++++-------- .../cn/hutool/core/util/EscapeUtilTest.java | 14 +++++++++++++ 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 76015b35a..132f4fe31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ * 【core 】 修复FuncKey函数无效问题 * 【core 】 修复ImgUtil.copyImage读取网络URL后宽高报错问题(issue#1821@Github) * 【core 】 修复StrJoiner.append配置丢失问题(issue#I49K1L@Gitee) +* 【core 】 修复EscapeUtil特殊字符的hex长度不足导致的问题(issue#I49JU8@Gitee) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/util/EscapeUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/EscapeUtil.java index 2819501b9..05beb38ac 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/EscapeUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/EscapeUtil.java @@ -118,20 +118,24 @@ public class EscapeUtil { } final StringBuilder tmp = new StringBuilder(content.length() * 6); - char j; + char c; for (int i = 0; i < content.length(); i++) { - j = content.charAt(i); - if (false == filter.accept(j)) { - tmp.append(j); - } else if (j < 256) { + c = content.charAt(i); + if (false == filter.accept(c)) { + tmp.append(c); + } else if (c < 256) { tmp.append("%"); - if (j < 16) { + if (c < 16) { tmp.append("0"); } - tmp.append(Integer.toString(j, 16)); + tmp.append(Integer.toString(c, 16)); } else { tmp.append("%u"); - tmp.append(Integer.toString(j, 16)); + if(c <= 0xfff){ + // issue#I49JU8@Gitee + tmp.append("0"); + } + tmp.append(Integer.toString(c, 16)); } } return tmp.toString(); diff --git a/hutool-core/src/test/java/cn/hutool/core/util/EscapeUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/EscapeUtilTest.java index b09d9a7d8..23e1c7fc4 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/EscapeUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/EscapeUtilTest.java @@ -38,6 +38,20 @@ public class EscapeUtilTest { Assert.assertEquals(str, unescape); } + /** + * https://gitee.com/dromara/hutool/issues/I49JU8 + */ + @Test + public void escapeAllTest2(){ + String str = "٩"; + + String escape = EscapeUtil.escapeAll(str); + Assert.assertEquals("%u0669", escape); + + String unescape = EscapeUtil.unescape(escape); + Assert.assertEquals(str, unescape); + } + @Test public void escapeSingleQuotesTest(){ // 单引号不做转义