В Java, как лучше всего убедиться, что я получаю строки UTF-8? - PullRequest
0 голосов
/ 26 марта 2011

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

Ответы [ 3 ]

4 голосов
/ 26 марта 2011

Строки Java всегда внутренне UTF-16. Вам действительно нужно обратить внимание на кодировки, когда вы конвертируете байты в строки и наоборот, потому что это и есть кодировка: набор правил для преобразования между байтами и символами / строками. НЕ является свойством строк. В вашем случае конвертация должна происходить ровно дважды: когда вы читаете со сторонних сайтов, и когда вы пишете в свой лог-файл.

При чтении со сторонних сайтов вы можете , а не , просто использовать UTF-8, поскольку эти сайты могут использовать все виды различных кодировок. Таким образом, вам необходимо придерживаться кодировки, которую они объявляют в заголовке HTTP, теге HTML META или заголовке XML. Любой достойный HTTP-клиент сделает это за вас, так что вам просто нужно позволить ему выполнить свою работу, а не пытаться делать что-либо себе красивое.

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

1 голос
/ 26 марта 2011

Шаг 1: убедитесь, что страница, содержащая форму, сама по себе в UTF-8.

Шаг 2: проверьте заголовки входящего запроса, чтобы узнать, дают ли они вам набор символов.

Шаг 3: не зависит от String(byte[]) или InputStreamReader(InputStream).Всегда вызывайте функции, которые принимают явную спецификацию набора символов.

0 голосов
/ 26 марта 2011

Конструктор String(byte[] bytes, Charset charset) позволяет указать кодировку символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...