--- src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java +++ src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRichTextString.java @@ -577,7 +577,7 @@ String txt = r.getT(); CTRPrElt fmt = r.getRPr(); - length += txt.length(); + length += utfDecode(txt).length(); formats.put(length, fmt); } return formats; --- src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java +++ src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRichTextString.java @@ -258,6 +258,19 @@ } @Test + public void testUtfDecode_withApplyFont() { + XSSFFont font = new XSSFFont(); + font.setBold(true); + font.setFontHeightInPoints((short) 14); + + CTRst st = CTRst.Factory.newInstance(); + st.setT("abc_x000D_2ef_x000D_"); + XSSFRichTextString rt = new XSSFRichTextString(st); + rt.applyFont(font); + assertEquals("abc\r2ef\r", rt.getString()); + } + + @Test public void testApplyFont_lowlevel(){ CTRst st = CTRst.Factory.newInstance(); String text = "Apache Software Foundation";