Проблема в том, что вы используете String.getBytes()
хотя бы один раз, возможно, дважды (вашу чрезвычайно длинную строку трудно прочитать; использование нескольких операторов облегчит понимание). Это не указывает кодировку, поэтому будет использоваться кодировка платформы по умолчанию. В этот момент у вас есть зависимость от платформы ... отсюда и проблема.
Не совсем понятно, чего вы пытаетесь достичь, но если вы ищете причины для поведения платформы, это первое, на что нужно обратить внимание.
Да, и создание PrintStream
подобного будет иметь ту же проблему ... вместо этого создайте OutputStreamWriter
с определенной кодировкой.