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