如何在 Dart 中编码为 UTF16 Little Endian?

How to encode to UTF16 Little Endian in Dart?

我正在尝试使用 Dart 操作程序使用的一些系统变量。我遇到过dart's utf package being discontinued, and I have not found any way to encode to UTF 16 Little Endian for a File.write的问题。是否有可以在 Dart 中将字节转换为 UTF 16 LE 的库?无论如何我都会使用 UTF,但它不是 null 安全的。我可能最终会尝试使用 utf 包源代码,但我正在检查这里是否有我错过的本机(或发布)实现,因为我是 UTF 和字节转换世界的新手。

我的目标:

encodeAsUtf16le(String s);

我不需要写BOM。

Dart Strings 内部使用 UTF-16。可以使用String.codeUnits获取UTF-16编码单元,然后写成little-endian形式:

  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);

另请参阅 ,这是关于将 UTF-16LE 编码为 Strings。

我也觉得有必要建议反对将 UTF-16 写入磁盘,除非您被外部要求所迫。