From cab30e8e46f2dd049d6cae0e4ec81f97a4e7fa63 Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Mon, 3 Jun 2019 15:00:32 +0200
Subject: [PATCH] OO-4062: encoding / decoding issue with byte array source

---
 .../form/flexible/impl/elements/richText/TextMode.java        | 4 ++--
 .../ims/qti21/ui/editor/interactions/FIBEditorController.java | 4 ++--
 .../form/flexible/impl/elements/richText/TextModeTest.java    | 3 +++
 3 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextMode.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextMode.java
index eabf6530c24..4d1e27843d3 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextMode.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextMode.java
@@ -19,7 +19,7 @@
  */
 package org.olat.core.gui.components.form.flexible.impl.elements.richText;
 
-import java.io.ByteArrayInputStream;
+import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -122,7 +122,7 @@ public enum TextMode {
 	private static void parse(String text, DefaultHandler handler) throws Exception {
 		HtmlParser parser = new HtmlParser(XmlViolationPolicy.ALTER_INFOSET);
 		parser.setContentHandler(handler);
-		parser.parseFragment(new InputSource(new ByteArrayInputStream(text.getBytes())), "");
+		parser.parseFragment(new InputSource(new StringReader(text)), "");
 	}
 	
 	private static final class TextAnalyser extends DefaultHandler {
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBEditorController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBEditorController.java
index 167e76b14b6..80b13a40f6f 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBEditorController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/FIBEditorController.java
@@ -19,8 +19,8 @@
  */
 package org.olat.ims.qti21.ui.editor.interactions;
 
-import java.io.ByteArrayInputStream;
 import java.io.File;
+import java.io.StringReader;
 
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -335,7 +335,7 @@ public class FIBEditorController extends FormBasicController {
 		try {
 			HtmlParser parser = new HtmlParser(XmlViolationPolicy.ALTER_INFOSET);
 			parser.setContentHandler(new SolutionExtractorHandler());
-			parser.parse(new InputSource(new ByteArrayInputStream(content.getBytes())));
+			parser.parse(new InputSource(new StringReader(content)));
 		} catch (Exception e) {
 			logError("", e);
 		}
diff --git a/src/test/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextModeTest.java b/src/test/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextModeTest.java
index 3f1ff99a8d0..ec7749dd968 100644
--- a/src/test/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextModeTest.java
+++ b/src/test/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/TextModeTest.java
@@ -68,5 +68,8 @@ public class TextModeTest {
 		
 		String linedText2 = TextMode.toMultiLine("<p>Lorem</p>ipsum<br>dolor<p>sit amet</p>");
 		Assert.assertEquals("Lorem\nipsum\ndolor\nsit amet", linedText2);
+		
+		String linedText3 = TextMode.toMultiLine("<p>Lorem</p>ipsum<br>dolor<p>sit \u00E4met</p>");
+		Assert.assertEquals("Lorem\nipsum\ndolor\nsit \u00E4met", linedText3);
 	}
 }
-- 
GitLab