Как считать и записать UTF-8 в диск на Android?

Я не могу считать и записать расширенные символы (французские символы с диакритикой, например) к текстовому файлу с помощью стандартных методов InputStreamReader, показанных в примерах API Android. Когда я считал назад использование файла:

InputStreamReader tmp = new InputStreamReader(in);
BufferedReader reader = new BufferedReader(tmp);
String str;
while ((str = reader.readLine()) != null) {
...

строковое чтение является усеченным в расширенных символах вместо в конце. Вторая половина строки затем прибывает в следующую строку. Я предполагаю, что должен сохранить свои данные как UTF-8, но я не могу найти примеры этого, и я плохо знаком с Java.

Кто-либо может предоставить мне пример или ссылку на соответствующую документацию?

9
задан itsadok 29 April 2010 в 07:16
поделиться

3 ответа

Очень просто и понятно. :)

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);
26
ответ дан 4 December 2019 в 06:35
поделиться

При создании экземпляра 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 каждый раз.

9
ответ дан 4 December 2019 в 06:35
поделиться

Это должно работать на Android, даже без явного указания UTF-8, потому что charset по умолчанию является UTF-8. если вы можете воспроизвести эту проблему, пожалуйста, поднимите ошибку с воспроизводимым тестовым случаем здесь:

http://code.google.com/p/android/issues/entry

1
ответ дан 4 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: