Я не могу считать и записать расширенные символы (французские символы с диакритикой, например) к текстовому файлу с помощью стандартных методов InputStreamReader, показанных в примерах API Android. Когда я считал назад использование файла:
InputStreamReader tmp = new InputStreamReader(in);
BufferedReader reader = new BufferedReader(tmp);
String str;
while ((str = reader.readLine()) != null) {
...
строковое чтение является усеченным в расширенных символах вместо в конце. Вторая половина строки затем прибывает в следующую строку. Я предполагаю, что должен сохранить свои данные как UTF-8, но я не могу найти примеры этого, и я плохо знаком с Java.
Кто-либо может предоставить мне пример или ссылку на соответствующую документацию?
Очень просто и понятно. :)
String filePath = "/sdcard/utf8_file.txt";
String UTF8 = "utf8";
int BUFFER_SIZE = 8192;
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), UTF8),BUFFER_SIZE);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), UTF8),BUFFER_SIZE);
При создании экземпляра InputStreamReader
используйте конструктор, который принимает набор символов.
InputStreamReader tmp = new InputStreamReader(in, "UTF-8");
И проделайте то же самое с OutputStreamWriter
. Мне нравится иметь
public static final Charset UTF8 = Charset.forName("UTF-8");
в некотором служебном классе в моем коде, чтобы я мог вызывать (подробнее см. Doc )
InputStreamReader tmp = new InputStreamReader(in, MyUtils.UTF8);
и не должны обрабатывать UnsupportedEncodingException
каждый раз.
Это должно работать на Android, даже без явного указания UTF-8, потому что charset по умолчанию является UTF-8. если вы можете воспроизвести эту проблему, пожалуйста, поднимите ошибку с воспроизводимым тестовым случаем здесь: