Во-первых, я хотел бы сказать, что я потратил много времени в поисках объяснения / решения. Я нашел подсказки о проблеме, но не смог решить мою конкретную проблему. Отсюда и пост на тему, которая, кажется, была избита до смерти хотя бы в некоторых случаях.
У меня есть тестовый класс Java, который проверяет правильное кодирование / декодирование утилитой Mime. Строки, используемые для тестирования, объявлены в исходном файле, и мы используем assertEquals () для проверки равенства после обработки входной строки. Вот пример:
String test = "S2, =?iso-8859-1?Q?F=E4ltstr=F6m?= =?iso-8859-1?Q?,_Patrik?= S3";
String expected = "S2, Fältström, PatrikS3";
В моем редакторе (и других внешних редакторах, таких как Notepad ++ и UltraEdit) входные строки отображаются правильно, если я решу прочитать их как кодировку windows-1252 или ISO-8859-1; UTF-8 отображает ожидаемую строку как «F ltstr m».
При компиляции и запуске на компьютере с Windows 7 я получаю следующий вывод:
Ожидаемый: S2, F ltstr m, PatrikS3
Фактически: S2, Fältström, PatrikS3
Я получаю это поведение в командной оболочке, а также в моем редакторе кода. Как ни странно, он работает на компьютере с Windows XP. Тем не менее, я проверил кодовую страницу, используя chcp в командной оболочке, и в обоих случаях получаю одинаковый вывод. Единственный способ заставить это работать - это скомпилировать класс с помощью "-encoding windows-1252", что я не хочу делать по разным причинам.
Итак, вопросы:
1) что отличает XP и Windows 7 от этого? Изменилась ли кодировка платформы по умолчанию?
2) как я могу это исправить, чтобы он работал как на машине с Windows 7, так и на машине с Linux?
Большое спасибо за понимание!