我正在尝试使用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编码为String
s.
我还不得不建议不要将UTF-16写入磁盘,除非外部要求迫使您这样做。