UTF-16LE txt 文件在 Flutter 中解码为字符串(dart)

Rak*_*rma 0 dart flutter

要读取我正在使用的 .txt 文件的文件内容

\n\n
List<String> linesList = await file.readAsLines(encoding: latin1);\nreturn linesList;\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用 Encodng UTF-8 的文件可以与上述代码完美配合。\n但是对于 Encoding UTF-16LE,它返回一个长度为文件中行的两倍的列表,但除第一行外均为空。第一个索引包含 \xc3\xbf\xc3\xbe#

\n

jam*_*lin 8

现在已package:utf被放弃(因此永远不会支持空安全),将 UTF-16LE 文件读取为 a 的另一种方法String是利用String内部使用 UTF-16 代码单元的 Dart。因此,您可以读取该文件,将数据解释为 16 位(无符号)整数,然后String使用它们作为 UTF-16 代码单元创建一个:

基本上:

var f = File("utf-16le.txt");
var bytes = f.readAsBytesSync();

// Note that this assumes that the system's native endianness is the same as
// the file's.
var utf16CodeUnits = bytes.buffer.asUint16List();

var s = String.fromCharCodes(utf16CodeUnits);
Run Code Online (Sandbox Code Playgroud)

我还将其作为练习留给读者处理文件开头的潜在 BOM。

另请参阅https://github.com/dart-lang/convert/issues/30,它要求 Dart SDK 提供 UTF-16 转换功能。