Загрузка текста из файла
Джава хорошо дружит с кодировкой UTF-8.
В ней на один символ приходится от 1 до 2 байтов.
Когда-то давно я пробовал загрузить текст из файла, и возникли проблемы.
В итоге я извратился, сделав свой формат строки, в котором символ представлен по типу джавовского:
size|byte1[byte2]
Так и жил с этим.
А недавно, делая проект на андроид, и пытаясь там грузить УТФ-текст из файла, я обнаружил, что в начале строки вылазит какой-то непонятный символ, но остальная часть строки нормальная.
Сделал самое простое: t = t.substring(1)
Но так как этот символ есть не всегда, то пришлось в начало добавлять спец. символ, типа #, и далее
i = t.indexOf('#');
t = t.substring(i);
Как-то это стрёмно, вставлять символ, выцеплять подстроку.
А потом обнаружил в Notepad++ кодировку "UTF-8 without BOM", решил сохранить в неё, и вуаля - всё чётко, только мой текст!
Ещё:
* в Qt строки в utf-8 сохраняются без BOM.
* в php чтение из файла - тоже лучше использовать без BOM, иначе левый символ в начале
* ответ на стековерфлоу:
What's different between utf-8 and utf-8 without BOM?
Даёшь хранение текста в формате "UTF-8 without BOM"!
Моя функция загрузки текста:
public static String loadText(final String path) {
try {
final InputStream is = Utils.class.getResourceAsStream(path);
final DataInputStream dis = new DataInputStream(is);
int size = dis.available();
byte b[] = new byte[size];
int actual = dis.read(b);
dis.close();
is.close();
String s = (new String(b, 0, actual, "UTF-8")).trim();
return s;
}
catch(Exception e) {}
return null;
}