Как читать и записывать UTF-8 на диск на Android? - PullRequest
9 голосов
/ 29 апреля 2010

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

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

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

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

Ответы [ 5 ]

26 голосов
/ 29 апреля 2010

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

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);
9 голосов
/ 29 апреля 2010

Когда вы создаете экземпляр 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 каждый раз.

1 голос
/ 09 мая 2010

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

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

0 голосов
/ 22 апреля 2014

Проверьте кодировку вашего файла, щелкнув его правой кнопкой мыши в Project Explorer и выбрав свойства. Если это неправильная кодировка, вам нужно будет повторно ввести свои специальные символы после ее изменения, или, по крайней мере, это был мой опыт.

0 голосов
/ 03 декабря 2012

если вы столкнулись с такой проблемой, попробуйте сделать это. Вы должны Encode и Decode свои данные в Base64. Это сработало для меня. Я могу поделиться кодом, если вам это нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...