When an invalid character is converted by getBytes() method, the character is converted to replacement byte data. Shift code (SO/SI) may not be added into right place by EBCDIC Mix charset. EBCDIC Mix charset encoder is stateful encoder. Shift code should be added by switching character set. On x-IBM1364, "\u3000\uD800" should be converted to "\x0E\x40\x40\x0F\x6F", but "\x0E\x40\x40\x6F\x0F" SI is not in right place.
Also ISO2022 related charsets use escape sequence to switch character set. But same kind of issue is there. ------------- Commit messages: - 8266013: Unexpected replacement character handling on stateful CharsetEncoder Changes: https://git.openjdk.java.net/jdk/pull/3719/files Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=3719&range=00 Issue: https://bugs.openjdk.java.net/browse/JDK-8266013 Stats: 248 lines in 3 files changed: 228 ins; 12 del; 8 mod Patch: https://git.openjdk.java.net/jdk/pull/3719.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/3719/head:pull/3719 PR: https://git.openjdk.java.net/jdk/pull/3719