diff --git a/disconf-web/src/main/java/com/baidu/disconf/web/service/config/service/impl/ConfigMgrImpl.java b/disconf-web/src/main/java/com/baidu/disconf/web/service/config/service/impl/ConfigMgrImpl.java index ba3b04b3f..cdf7e57e2 100644 --- a/disconf-web/src/main/java/com/baidu/disconf/web/service/config/service/impl/ConfigMgrImpl.java +++ b/disconf-web/src/main/java/com/baidu/disconf/web/service/config/service/impl/ConfigMgrImpl.java @@ -511,9 +511,10 @@ private MachineListVo getZkData(List datalist, Config config) int errorNum = 0; for (ZkDisconfDataItem zkDisconfDataItem : datalist) { + String value = CodeUtils.unicodeToUtf8(config.getValue()); if (config.getType().equals(DisConfigTypeEnum.FILE.getType())) { - List errorKeyList = compareConfig(zkDisconfDataItem.getValue(), config.getValue()); + List errorKeyList = compareConfig(zkDisconfDataItem.getValue(), value); if (errorKeyList.size() != 0) { zkDisconfDataItem.setErrorList(errorKeyList); @@ -525,11 +526,11 @@ private MachineListVo getZkData(List datalist, Config config) // 配置项 // - if (zkDisconfDataItem.getValue().trim().equals(config.getValue().trim())) { + if (zkDisconfDataItem.getValue().trim().equals(value.trim())) { } else { List errorKeyList = new ArrayList(); - errorKeyList.add(config.getValue().trim()); + errorKeyList.add(value.trim()); zkDisconfDataItem.setErrorList(errorKeyList); errorNum++; } diff --git a/disconf-web/src/main/java/com/baidu/disconf/web/utils/CodeUtils.java b/disconf-web/src/main/java/com/baidu/disconf/web/utils/CodeUtils.java index c1fcc4b77..6da40712e 100644 --- a/disconf-web/src/main/java/com/baidu/disconf/web/utils/CodeUtils.java +++ b/disconf-web/src/main/java/com/baidu/disconf/web/utils/CodeUtils.java @@ -10,6 +10,8 @@ public class CodeUtils { protected static final Logger LOG = LoggerFactory.getLogger(CodeUtils.class); + private static final int SHIFT = 4; + /** * utf-8 转换成 unicode */ @@ -26,10 +28,17 @@ public static String utf8ToUnicode(String inStr) { int j = (int) myBuffer[i] - 65248; sb.append((char) j); } else { - int chr1 = (char) myBuffer[i]; - String hexS = Integer.toHexString(chr1); - String unicode = "\\u" + hexS; - sb.append(unicode.toLowerCase()); + int chr1 = myBuffer[i] & 0x0FFFF; + + //@see Integer::toUnsignedString0 + int mag = Integer.SIZE - Integer.numberOfLeadingZeros(chr1); + int chars = Math.max(((mag + (SHIFT - 1)) / SHIFT), 1); + + sb.append("\\u"); + for (int j = 0; j < SHIFT - chars; j++) { + sb.append('0'); + } + sb.append(Integer.toHexString(chr1).toLowerCase()); } } return sb.toString(); diff --git a/disconf-web/src/test/java/com/baidu/disconf/web/test/utils/CodeUtilsTestCase.java b/disconf-web/src/test/java/com/baidu/disconf/web/test/utils/CodeUtilsTestCase.java index de6aaa4c7..8cbc8b1bd 100644 --- a/disconf-web/src/test/java/com/baidu/disconf/web/test/utils/CodeUtilsTestCase.java +++ b/disconf-web/src/test/java/com/baidu/disconf/web/test/utils/CodeUtilsTestCase.java @@ -14,6 +14,20 @@ */ public class CodeUtilsTestCase { + @Test + public void utf8ToUnicodeTest() { + String code = CodeUtils.utf8ToUnicode("syserror.paramtype=请求参数解析错误"); + System.out.println(code); + Assert.assertEquals("syserror.paramtype=\\u8bf7\\u6c42\\u53c2\\u6570\\u89e3\\u6790\\u9519\\u8bef", code); + } + + @Test + public void utf8ToUnicodeTest2() { + String code = CodeUtils.utf8ToUnicode("·"); + System.out.println(code); + Assert.assertEquals("\\u00b7", code); + } + @Test public void unicodeToUtf8Test() {