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

2023-12-02

我正在尝试使用 Dart 来操作程序使用的一些系统变量。我遇到过这样的问题飞镖的utf软件包已停产,并且我还没有找到任何方法来编码为 UTF 16 Little EndianFile。写。 Dart 中是否有可以进行字节到 UTF 16 LE 转换的库?无论如何我都会使用UTF,但它不是空安全的。我可能最终会尝试使用 utf 包源代码,但我在这里检查是否有我错过的本机(或 pub)实现,因为我是 UTF 和字节转换领域的新手。

My goal:

encodeAsUtf16le(String s);

我不需要写BOM。


Dart Strings 内部使用 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.

我也觉得有必要提建议against将 UTF-16 写入磁盘,除非外部要求迫使您这样做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Dart 中编码为 UTF16 Little Endian? 的相关文章