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 babe8a98f..ddc441b50 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 95d267ffe..3193ade29 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 encodeDecodeDomainTest() { // 全中文 @@ -32,7 +40,7 @@ public class PunyCodeTest { // 中英文分段 final String text = "hutool.中国"; final String strPunyCode = PunyCode.encodeDomain(text); - Assert.assertEquals("xn--hutool-.xn--fiqs8s", strPunyCode); + Assert.assertEquals("hutool.xn--fiqs8s", strPunyCode); final String decode = PunyCode.decodeDomain(strPunyCode); Assert.assertEquals(text, decode); @@ -48,4 +56,13 @@ public class PunyCodeTest { final String decode = PunyCode.decodeDomain(strPunyCode); Assert.assertEquals(text, decode); } + + @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); + } }