#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».