在Dart中如何将字符串编码为UTF-16 Little Endian格式?
解决方案
原生无依赖实现(推荐)
你完全不需要引入第三方包,Dart内置的类型已经可以直接实现UTF-16 LE编码,且天然支持空安全,也不会写入BOM,示例代码如下:
import 'dart:typed_data'; Uint8List encodeAsUtf16le(String s) { // Dart字符串的codeUnits本身就是UTF-16码元序列 final utf16CodeUnits = s.codeUnits; final resultBytes = Uint8List(utf16CodeUnits.length * 2); final byteData = resultBytes.buffer.asByteData(); for (int i = 0; i < utf16CodeUnits.length; i++) { // 按小端序写入每个16位码元 byteData.setUint16(i * 2, utf16CodeUnits[i], Endian.little); } return resultBytes; }
你可以直接用这个函数的返回值调用File.writeAsBytes完成写入,示例如下:
import 'dart:io'; Future<void> writeUtf16leFile(String filePath, String content) async { final utf16leBytes = encodeAsUtf16le(content); await File(filePath).writeAsBytes(utf16leBytes); }
第三方包实现
如果你需要处理更多字符编码转换场景,也可以直接使用pub平台上的空安全编码类库,比如charset_converter、utf16,都封装了现成的UTF-16 LE编解码能力,直接调用对应API即可。
内容的提问来源于stack exchange,提问作者Jack1221
相关产品推荐
相关产品推荐

