From 5f68c739382539afbfe5bd0c986d95dc6f9474f9 Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 20 Sep 2022 22:54:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DPunyCode=E5=A4=84=E7=90=86?= =?UTF-8?q?=E5=9F=9F=E5=90=8D=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../java/cn/hutool/core/codec/PunyCode.java | 6 +++++- .../java/cn/hutool/core/codec/PunyCodeTest.java | 17 +++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f3cacd937..5c0aead78 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ ### 🐞Bug修复 * 【core 】 修复FileNameUtil.cleanInvalid无法去除换行符问题(issue#I5RMZV@Gitee) * 【core 】 修复murmur3_32实现错误(pr#2616@Github) +* 【core 】 修复PunyCode处理域名的问题(pr#2620@Github) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/codec/PunyCode.java b/hutool-core/src/main/java/cn/hutool/core/codec/PunyCode.java index 48b6d40aa..ea3b32db5 100644 --- a/hutool-core/src/main/java/cn/hutool/core/codec/PunyCode.java +++ b/hutool-core/src/main/java/cn/hutool/core/codec/PunyCode.java @@ -85,6 +85,10 @@ public class PunyCode { } // Append delimiter if (b > 0) { + if(b == length){ + // 无需要编码的字符 + return output.toString(); + } output.append(DELIMITER); } int h = b; @@ -158,7 +162,7 @@ public class PunyCode { if (result.length() != 0) { result.append(CharUtil.DOT); } - result.append(decode(str)); + result.append(StrUtil.startWithIgnoreEquals(str, PUNY_CODE_PREFIX) ? decode(str) : str); } return result.toString(); diff --git a/hutool-core/src/test/java/cn/hutool/core/codec/PunyCodeTest.java b/hutool-core/src/test/java/cn/hutool/core/codec/PunyCodeTest.java index 296ac2fd1..4e575154c 100644 --- a/hutool-core/src/test/java/cn/hutool/core/codec/PunyCodeTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/codec/PunyCodeTest.java @@ -16,6 +16,14 @@ public class PunyCodeTest { Assert.assertEquals(text, decode); } + @Test + public void encodeDecodeTest2(){ + // 无需编码和解码 + String text = "Hutool"; + String strPunyCode = PunyCode.encode(text); + Assert.assertEquals("Hutool", strPunyCode); + } + @Test public void encodeEncodeDomainTest(){ String domain = "赵新虎.中国"; @@ -23,4 +31,13 @@ public class PunyCodeTest { String decode = PunyCode.decodeDomain(strPunyCode); Assert.assertEquals(decode, domain); } + + @Test + public void encodeEncodeDomainTest2(){ + String domain = "赵新虎.com"; + String strPunyCode = PunyCode.encodeDomain(domain); + Assert.assertEquals("xn--efvz93e52e.com", strPunyCode); + String decode = PunyCode.decodeDomain(strPunyCode); + Assert.assertEquals(domain, decode); + } }