Каковы могут быть возможные последствия кодировки по умолчанию в UTF-8 для преобразования строки в поток? - PullRequest
2 голосов
/ 13 апреля 2011

Мне нужно преобразовать строки, полученные из некоторых API, в InputStream, используемые другими API. Единственный способ - я преобразую строку в поток, не зная точной кодировки. Так что я предполагаю, что это UTF-8, и пока он работает нормально. Однако я хотел бы знать, что может быть лучшим решением для этого, учитывая, что у меня нет способа идентифицировать кодировку источника строки.

Ответы [ 4 ]

3 голосов
/ 13 апреля 2011

Нет хорошего решения проблемы незнания кодировки.

Из-за этого вы должны требовать, чтобы кодировка была явно указана, или использовать одну единую согласованную кодировку, которая строго соблюдается.

Кроме того, убедитесь, что вы используете редкую форму конструктора для InputStreamReader, которая снижается, чтобы вызвать исключение при ошибке кодирования. Это InputStreamReader(InputStream in, CharsetDecoder dec). Остальные три либо неработоспособны, либо неверно спроектированы в зависимости от вашей точки зрения или целей, поскольку они подавляют ошибки кодирования и делают вашу программу ненадежной и непереносимой.

Будьте очень осторожны в отношении пропущенных ошибок, особенно когда вы точно не знаете, что получаете - и даже если думаете, что делаете :).

0 голосов
/ 13 апреля 2011

Чтобы добавить к другим ответам, развернутое приложение больше не будет переносимым между Windows и Linux, так как они обычно имеют разные кодировки по умолчанию.

0 голосов
/ 13 апреля 2011

Кодировки не являются свойством строк в Java, они имеют значение только при преобразовании между строками и байтами.Если эти API предоставляют вам строки, есть только один момент, когда вашей программе нужно использовать кодировку, а именно когда вы преобразуете строку обратно в байты, которые должны быть возвращены InputStream.И эти «другие API», конечно, должны знать, какую кодировку использовать, если они собираются интерпретировать содержимое как текстовые данные.

0 голосов
/ 13 апреля 2011

Возможные последствия применения неправильной кодировки - вывод неправильных данных на другой конец.

Конкретные последствия будут зависеть от конкретных кодировок.Например, если вы получаете поток символов ISO-8859-1 и пытаетесь декодировать с использованием UTF-8, вы, вероятно, получите ошибки из-за неправильных последовательностей.Если вы начнете с UTF-16 и предположите, что это ISO-8859-1, вы получите вдвое больше символов, чем ожидаете, и все остальные будут мусором.

...