ConvertResult (byte @NotNull [] bytes, int startOffset, int endOffset, @NotNull Charset internalCharset) { assert startOffset >= 0 && startOffset <= endOffset && endOffset <= bytes.length: startOffset + "," + endOffset+": "+bytes.length; if (internalCharset instanceof SevenBitCharset || internalCharset == StandardCharsets.US_ASCII) { // optimisation: skip byte-to-char conversion for ascii chars return convertLineSeparatorsToSlashN(bytes, startOffset, endOffset); } ByteBuffer byteBuffer = ByteBuffer.wrap(bytes, startOffset, endOffset - startOffset); CharBuffer charBuffer; try { charBuffer = internalCharset.decode(byteBuffer); } catch (Exception e) { // esoteric charsets can throw any kind of exception charBuffer = CharBuffer.wrap(ArrayUtilRt.EMPTY_CHAR_ARRAY); } return convertLineSeparatorsToSlashN(charBuffer); }