diff --git a/src/main/java/org/olat/core/util/StringHelper.java b/src/main/java/org/olat/core/util/StringHelper.java index 0d184df22794c496d73917c0177f1b60f4c4bb42..dd72aa14d1d2d5256c69692fcbc89ade8663e1c6 100644 --- a/src/main/java/org/olat/core/util/StringHelper.java +++ b/src/main/java/org/olat/core/util/StringHelper.java @@ -488,23 +488,24 @@ public class StringHelper { if(string == null) return null; if(string.length() == 0) return string; - StringBuilder sb = new StringBuilder(); + StringBuilder sb = new StringBuilder(string.length()); char[] charArr = string.toCharArray(); int numOfCharacters = charArr.length; for(int i=0; i<numOfCharacters; i++) { - char ch = charArr[i]; + int ch = string.codePointAt(i); if(ch < 32) { switch(ch) { - case '\n': sb.append(ch); break;//0x000A - case '\t': sb.append(ch); break;//0x0009 - case '\r': sb.append(ch); break;//0x000D + case '\n': //0x000A + case '\t': //0x0009 + case '\r': sb.appendCodePoint(ch); break;//0x000D + default: // dump them } } else if(ch >= 0x0020 && ch <= 0xD7FF) { - sb.append(ch); + sb.appendCodePoint(ch); } else if(ch >= 0xE000 && ch <= 0xFFFD) { - sb.append(ch); + sb.appendCodePoint(ch); } else if(ch >= 0x10000 && ch <= 0x10FFFF) { - sb.append(ch); + sb.appendCodePoint(ch); } } return sb.toString(); diff --git a/src/test/java/org/olat/core/util/StringHelperTest.java b/src/test/java/org/olat/core/util/StringHelperTest.java index b90a0cf7ba5c448a30dc3bb4aa508387f8fa5e36..ed2022dbd4a63ac8823a601e3c21f2e4f46b6eef 100644 --- a/src/test/java/org/olat/core/util/StringHelperTest.java +++ b/src/test/java/org/olat/core/util/StringHelperTest.java @@ -139,6 +139,10 @@ public class StringHelperTest { //it's pahlavi \u10B7x String value12 = StringHelper.cleanUTF8ForXml("Hello\u10B7x pahlavi"); Assert.assertEquals("Pahlavi test", "Hello\u10B7x pahlavi", value12); + + // smile + String value13 = StringHelper.cleanUTF8ForXml("Smile \uD83D\uDE00x"); + Assert.assertEquals("Smile test", "Smile \uD83D\uDE00x", value13); } @Test