dart - 如何在 Dart 中编码为 UTF16 Little Endian?
问题描述
我正在尝试使用 Dart 操作程序使用的一些系统变量。我遇到了dart的utf包被停用的问题,我还没有找到任何方法将文件.write编码为UTF 16 Little Endian 。是否有一个库可以在 Dart 中进行字节到 UTF 16 LE 的转换?无论如何我都会使用 UTF,但它不是 null 安全的。我最终可能会尝试使用 utf 包源代码,但我在这里检查是否有我错过的本机(或 pub)实现,因为我是 UTF 和字节转换世界的新手。
我的目标:
encodeAsUtf16le(String s);
我不需要写 BOM。
解决方案
DartString
内部使用 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);
或假设您在 little-endian 系统上运行:
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 写入磁盘,除非你被外部要求强迫。
推荐阅读
- spring-mvc - 如何设置 Spring MVC 默认字符集
- r - 计算特定时间段内的发生次数
- html - 是否可以更改css中的元标记
- typescript - 打字稿生成器:SyntaxError:意外的严格模式保留字
- java - Android内部重用属性
用不同的名字 - r - 我想使用 R 匹配基于任意地址字段的两个数据集
- c# - 使用 React 和 Entity Framework Core 5 Web API 的 CORS 问题
- html - 在 VS Code 中禁用 HTML 中的注释和元素标记之间的自动换行符
- visual-studio-code - 是否可以自动更新 VsCode/PyCharm 机器人框架中资源文件的导入
- java - JPA 和 Spring Boot:来自 DB (H2) 的整数未按预期映射到布尔值