Я получаю файл вот кусок функции
while ((bytesRead = is.read(data)) > 0) {
try {
sb.append(new String(data, 0, bytesRead, charset));
} catch (UnsupportedEncodingException e) {
Log.e(MY_LOG, "Invalid charset: " + e);
//Append without charset (uses system's default charset)
sb.append(new String(data, 0, bytesRead));
}
}
И у меня всегда попадает в блок catch (UnsupportedEncodingException e) . Но файл записывается и все нормально...
Что означает этот charset? Я так понял это кодировка...
Но насколько страшно, что я записываю без нее?
Вот кстати метод который получает эту кодировку
String[] values = conn.getContentType().split(";");
String charset = "";
for (String value : values) {
value = value.trim();
if (value.toLowerCase().startsWith("charset=")) {
charset = value.substring("charset=".length());
break;
}
}
Я так понял, что если сервер передал мне файл с кодировкой, то я ее прочитываю и записываю файл с той же кодировкой...
Ответ
Что означает этот charset? Я так понял это кодировка...
Вы правильно поняли что charset отвечает за то как раскодировать последовательность байтов в символы. В общем случае, из одного и того же же байт массива используя разные кодировки, вы получите разные строки.
Вот, кстати, пример проблеммы при использовании неверной кодировки.
Но насколько страшно, что я записываю без нее?
На столько-же на сколько страшно что в результате ваш текст будет состоять например из одних ? - символ которым в некотрых кодировках заменяются все символы отсутствующие в кодировке.
Но файл записывается и все нормально...
Скорее всего ваша система использует windows-1251 которая знает русские и аеглийские символы так что ваш файл раскодируется корректно. Но это скорее совпадение. Ваш код вряд ли будет работать для файла с китайскими символами.
Вот еще: получить charset по умолчанию для вашей JVM можно если выполнить
Charset.defaultCharset()
Комментариев нет:
Отправить комментарий