Преобразование docx в Base64 с помощью ContentResolver дает нечитаемый формат на Android

#android #kotlin #android-contentresolver

#Android #kotlin #android-contentresolver

Вопрос:

У меня есть файл test.docx содержит 1 слово «Тестирование». Этот файл находится в моей папке Dropbox, и я открываю его из приложения с помощью ContentResolver.

введите описание изображения здесь

Код:

             val inputStream = context.contentResolver.openInputStream(uri)
            val allText = inputStream.bufferedReader().use(BufferedReader::readText)
            base64Image = Base64.encodeToString(allText.toByteArray(), Base64.NO_WRAP)
  

allText возвращает некоторые данные, но при помещении этого в текстовый файл и сохранении его как .docx я не могу его просмотреть, он сломан. Я думаю, мне следует добавить кодировку в метод BufferedReader. Пробовал пару, но ни один из них не работает.

Каким должен быть правильный код для этого?

Ответ №1:

DOCX это не обычный текст. Это двоичный формат. Используется readBytes() для чтения в байтах:

 val bytes = context.contentResolver.openInputStream(uri).readBytes()
  

Имейте в виду, что ваше приложение выйдет из строя из OutOfMemoryError -за большого содержимого. Пожалуйста, пересмотрите свой план чтения всего содержимого, не говоря уже о преобразовании его в base64.