Ваш changeCharset
метод кажется странным. String
объекты в Java лучше всего рассматривать как не имеющие определенного набора символов. Они используют Unicode и поэтому могут представлять все символы, а не только одно региональное подмножество. Ваш метод говорит: превратите строку в байты, используя набор символов моей системы (что бы это ни было), а затем попытайтесь интерпретировать эти байты, используя другой набор символов (указанный в newCharset
), который, следовательно, вероятно, не будет работать. Если вы конвертируете в байты в кодировке, вы должны прочитать эти байты с той же кодировкой.
Обновление
Чтобы преобразовать строку в Shift-JIS (региональная кодировка, обычно используемая в Японии), вы можете сказать:
byte[] jis = str.getBytes("Shift_JIS");
Если вы записываете эти байты в файл, а затем открываете файл в Блокноте на компьютере Windows, где все региональные настройки ориентированы на Японию, Блокнот отобразит его на японском языке (больше ничего не нужно делать, он будет предполагать, текст находится в локальной кодировке системы).
Однако вы можете с таким же успехом сохранить его как UTF-8 (с префиксом 3-байтовой последовательности вводного UTF-8), и Блокнот также отобразит его как японский. Shift-JIS - это только один способ представления японского текста в байтах.