Как прочитать файл в нестандартной кодировке на Dart
очень заинтересовал flutter и dart, начал изучать язык и технологию, но появляются проблемы в самых неожиданных местах. Не являюсь программистом, скорее использую языки программирования для решения задач учёта и автоматизации время от времени. Прошу прощения за вопрос - вероятно, для специалиста он смешной, но рискну...
Неожиданно наткнулся на следующую проблему: не нашел, как в dart прочитать файл в кодировке UTF-16LE. Не сомневаюсь, что он есть(этот способ), но у меня, как у новичка, возникла проблема. Да, избаловал меня python, где таких проблем я не встречал.
Похоже, dart может в базе работать с текстовыми файлами только в кодировке UTF-8.
Есть ли какой-нибудь простой способ это сделать? Если можно, поделитесь кодом.
Спасибо!
Ответы (1 шт):
Есть довольно старенькая, но пока ещё работоспособная библиотека Utf, вот пример её использования:
import 'dart:io';
import 'package:utf/utf.dart';
main() async {
var file = File("test.utf.16le");
var bytes = await file.readAsBytes();
var content = decodeUtf16le(bytes);
print("$content");
}
Но т.к. dart-строки хранятся в памяти в кодировке UTF-16, то довольно просто прочитать файл без всяких дополнителных библиотек, с одним только условием, что платформа на которой запускается код использует порядок байтов LE (little-endian используется практически на всех настолных компьютерах). В противном случае пары байтов нужно поменять местами.
Пример без использования сторонних библиотек:
import 'dart:io';
import 'dart:typed_data';
main() async {
var file = File("test.utf.16le");
var bytes = await file.readAsBytes();
var codes = Uint16List.view(bytes.buffer);
var content = String.fromCharCodes(codes);
print("$content");
}