如何在Dart中编码到UTF16 Little Endian



我正在尝试使用Dart操作程序使用的一些系统变量。我遇到了dart的utf包被停用的问题,我没有找到任何方法来为File.write编码到UTF16LittleEndian。有没有一个库可以在dart中进行字节到UTF16LE的转换?我无论如何都会使用UTF,但它不是空安全的。我最终可能会尝试使用utf包源代码,但我在这里检查是否有我错过的本地(或pub(实现,因为我是utf和字节转换世界的新手。

我的目标:

encodeAsUtf16le(String s);

我不需要写BOM。

DartString内部使用UTF-16。您可以使用String.codeUnits来获得UTF-16代码单元,然后以小端形式编写它们:

var s = 'u{1F4A9}';
var codeUnits = s.codeUnits;
var byteData = ByteData(codeUnits.length * 2);
for (var i = 0; i < codeUnits.length; i += 1) {
byteData.setUint16(i * 2, codeUnits[i], Endian.little);
}

var bytes = byteData.buffer.asUint8List();
await File('output').writeAsBytes(bytes);

或者假设您运行的是一个小端系统:

var s = 'u{1F4A9}';
var codeUnits = s.codeUnits;
var bytes = Uint16List.fromList(codeUnits).buffer.asUint8List();
await File('output').writeAsBytes(bytes);

另请参阅https://stackoverflow.com/a/67802971/,这是关于将UTF-16LE编码为Strings.

我还不得不建议不要将UTF-16写入磁盘,除非外部要求迫使您这样做。

最新更新