Макроман против UTF-8

Я пытаюсь извлечь байтовые данные из источника, зашифровать их и затем сохранить в файловой системе.

Для шифрования я использую jasypt и класс BasicTextEncryptor. А для хранения в файловой системе я использую класс Apache Commons IOUtils.

При необходимости эти файлы будут расшифрованы, а затем отправлены в браузер пользователя. Эта система работает на моей локальной машине, где кодировка по умолчанию - MacRoman, но она не работает на сервере, где кодировка по умолчанию - UTF-8.

Когда я явно устанавливаю кодировку на каждом этапе процесса для использования MacRoman, он также работает на сервере, но я скептически отношусь к этому, поскольку остальная часть моего кода использует UTF8.

Есть ли способ, которым я могу работать с кодом без преобразования в MacRoman?

2 ответа

Решение

Вы должны просто использовать UTF8 везде.

Пока вы используете одну и ту же кодировку на каждом конце операции (и если кодировка может обрабатывать все необходимые вам символы), все будет в порядке.

В ваших комментариях к другому ответу вы утверждаете, что не используете кодировку, но это невозможно. Вы используете класс BasicTextEncryptor, который в соответствии с этой документацией работает только со строками и массивами символов. Это означает, что в какой-то момент вы конвертируете из байтового массива, не зависящего от кодировки, в специфичный для кодировки массив String или char. Это означает, что вы полагаетесь на кодировку где-то, понимаете ли вы это или нет. Вам необходимо отследить, где происходит это преобразование, и убедиться, что оно имеет правильную кодировку.

Ваш вопрос гласит: "Когда я явно устанавливаю кодировку на каждом этапе процесса", вам необходимо знать, как она кодируется в базе данных. Если это не имеет смысла, читайте дальше.

Также возможно, что вы просто пытаетесь зашифровать файл, который извлекаете из базы данных, и вас не волнует строковое представление; Вы хотите рассматривать это как простые байты, а не как текст. В этом случае BasicTextEncrypter ("служебный класс для простого выполнения шифрования текстов нормальной прочности") не подходит для этой задачи. Он шифрует строки. BasicBinaryEncryptor ("служебный класс для простого выполнения обычного шифрования двоичных файлов (байтовых массивов)") - это то, что вам нужно.

Другие вопросы по тегам