#excel #flutter
#excel #flutter
Вопрос:
У меня есть следующий код, который я использую для экспорта символов Юникода (Herbrew) в CSV, предназначенный для открытия в Excel / Google Sheets:
String csv = const ListToCsvConverter().convert(rows);
List<int> bytes = List.from(utf8.encode(csv));
// bytes.insert(0, unicodeBomCharacterRune );
return bytes;
Если я экспортирую его в gmail и открываю в Google sheets, он работает нормально, но когда я открываю его с помощью Excel, он открывает его как тарабарщину.
Я хорошо знаком с этой проблемой, которую я решил в другом ENV (php, js), добавив символ спецификации в начале файла, но когда я делаю это в flutter (ie. раскомментируйте строку bytes.insert(0, unicodeBomCharacterRune );
) Я получаю тарабарщину как в sheets, так и в Excel.
Есть идеи, как решить эту проблему?
Комментарии:
1. В общем, в Excel, если вы импортируете (например, с помощью Power Query) вместо open , вы можете указать используемый вариант языка (а также другие свойства, такие как порядок дат, текст против числа и т. Д.), Которые обычно не встречаются в файлах CSV. В моем Power Query я вижу список трех разных версий иврита, которые можно использовать, а также общий UTF8.
2. Мне нужно, чтобы значение по умолчанию
open
работало как есть
Ответ №1:
Вот как я это решил:
String csv = const ListToCsvConverter().convert(rows);
List<int> bytes = List.from(utf8.encode(csv));
bytes.insert(0, 0xBF );
bytes.insert(0, 0xBB );
bytes.insert(0, 0xEF );
return bytes;
The UTF-8 BOM is a sequence of bytes at the start of a text stream (0xEF, 0xBB, 0xBF) that allows the reader to more reliably guess a file as being encoded in UTF-8.
ПРИМЕЧАНИЕ: я вставляю байты в обратном порядке, поскольку добавляю их в начало