diff --git a/src/main/java/com/googlecode/lanterna/graphics/AbstractTextGraphics.java b/src/main/java/com/googlecode/lanterna/graphics/AbstractTextGraphics.java index ecf641192..44bdc6a93 100644 --- a/src/main/java/com/googlecode/lanterna/graphics/AbstractTextGraphics.java +++ b/src/main/java/com/googlecode/lanterna/graphics/AbstractTextGraphics.java @@ -261,11 +261,14 @@ public TextGraphics drawImage( @Override public TextGraphics putString(int column, int row, String string) { string = prepareStringForPut(column, string); - int offset = 0; - for(int i = 0; i < string.length(); i++) { - char character = string.charAt(i); - setCharacter(column + offset, row, newTextCharacter(character)); - offset += getOffsetToNextCharacter(character); + TextCharacter[] textCharacters = TextCharacter.fromString(string, foregroundColor, backgroundColor, activeModifiers); + int previousDoubleCharacterCount = 0; + for (int i = 0; i < textCharacters.length; i++) { + TextCharacter textCharacter = textCharacters[i]; + setCharacter(column + i + previousDoubleCharacterCount, row, textCharacter); + if (textCharacter.isDoubleWidth()) { + previousDoubleCharacterCount++; + } } return this; } diff --git a/src/main/java/com/googlecode/lanterna/terminal/ansi/StreamBasedTerminal.java b/src/main/java/com/googlecode/lanterna/terminal/ansi/StreamBasedTerminal.java index 050771947..26d7cb820 100644 --- a/src/main/java/com/googlecode/lanterna/terminal/ansi/StreamBasedTerminal.java +++ b/src/main/java/com/googlecode/lanterna/terminal/ansi/StreamBasedTerminal.java @@ -100,8 +100,12 @@ public void putCharacter(char c) throws IOException { */ @Override public void putString(String string) throws IOException { - for (int i = 0; i < string.length(); i++) { - putCharacter(string.charAt(i)); + if (UTF8_REFERENCE == terminalCharset) { + writeToTerminal(string.getBytes(terminalCharset)); + } else { + for (int i = 0; i < string.length(); i++) { + putCharacter(string.charAt(i)); + } } }