如何在 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 String
s 内部使用 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 编码为 String
s。
我也觉得有必要建议反对将 UTF-16 写入磁盘,除非您被外部要求所迫。
我正在尝试使用 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 String
s 内部使用 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 编码为 String
s。
我也觉得有必要建议反对将 UTF-16 写入磁盘,除非您被外部要求所迫。