Как установить тип кодирования файла с помощью ContentResolver?

#android #kotlin

#Android #котлин

Вопрос:

Я использую этот код, чтобы вызвать намерение и указать место для создания файла в проводнике:

 private val getContent = registerForActivityResult(ActivityResultContracts.CreateDocument()) { uri -gt;  uri?.let { writeToFile(requireActivity(), it) }  }  fun writeToFile(context: Context, source: Uri) = viewModelScope.launch(Dispatchers.IO) {  val contentResolver = context.contentResolver   contentResolver.openOutputStream(source).use {  out.write("id,Цвет,Размерn".toByteArray())  out.close()  }  }  

Но мой CSV-файл имеет плохой формат кодирования, поэтому я получаю нечитаемый текст, открывая его в приложении MS Office по умолчанию на своем устройстве. Как я могу установить что-то вроде 1251 или Unicode в созданный файл?

Таким образом, «id» в порядке, а «Цвет», «Размер» выглядит сломанным и нечитаемым

Комментарии:

1. Файл будет создан с помощью ACTION_CREATE_DOCUMENT. Файл пуст. Имеет 0 байт. У него нет кодировки или спецификации. Ваше приложение запишет байты в файл. Ваше приложение сделает его нужным файлом. Что именно идет не так? Android имеет кодировку по умолчанию.

2. @blackapps основная проблема заключается в типе кодирования. Это UTF-8 по умолчанию, я думаю, но у меня на нем нечитаемый текст в MS Office. Мне нужен CP1251 или Unicode. Вы можете мне с этим помочь?

3. UTF-8 также является Юникодом.

Ответ №1:

Вместо использования функции WriteLine() для ваших строк вы должны записывать байты.

Что-то вроде:

 String line = "this,is,a,csv,linen";  stream.write(line.getBytes("1251"));  

Извините, забыл правильную кодировку.. Почему ты не упомянул об этом?

Вы также не сказали, ожидает ли ms office спецификацию.

Комментарии:

1. Я не могу использовать метод .getBytes() для строки, у меня его нет. Я пользователь . toByteArray раньше, но результата нет

2. Я думаю, что MS Office ожидает спецификации. Я не использовал его раньше

3. Пожалуйста, опубликуйте свой соответствующий код для написания в своем посте. Мы не знаем, чем вы занимаетесь, поэтому нам трудно помочь. И сначала написать спецификацию очень просто.

4. ладно, извини. я опубликую, как я справляюсь с этим прямо сейчас

5. И найдите правильный параметр кодировки «1251».