编码 UFT16 表情符号 returns 无效字节

Encoding UFT16 Emoji returns invalid bytes

我正在尝试在 dart 中对 Unicode 字符进行编码,但这会导致字节数组无效。

人物:

字节数:[FF, FE, 3D, D8, 25, DD]

字符串使用 BOM 编码。解码此字符串后,我可以看到该字符串被正确解析,结果在我的 IDE.

中看到了表情符号

然后我再次尝试对字符串进行编码,但是这给了我一个字节数组,我不明白:

[FF, FE, FD, FF, FD, FF]

我正在使用包 utf_convert 对字符串进行编码:

import 'package:utf_convert/utf_convert.dart' as utf;

List<int> convert(String input) {
  return utf.encodeUtf16le(input, true).cast<int>();
}

这是这个包中的错误,还是我在这里监督了什么?

编辑1

我写了一些简单的测试来捕捉问题:

void main() {
  var emojiString = '';
  var emojiBytes = <int>[0xFF, 0xFE, 0x3D, 0xD8, 0x25, 0xDD];

  test('Decode Emoji', () {
    var emoji = utf.decodeUtf16le(emojiBytes);

    expect(emoji, emojiString);
  });

  test('Encode Emoji', () {
    var bytes = utf.encodeUtf16le(emojiString, true).cast<int>();

    expect(bytes, emojiBytes);
  });
}

函数“Decode Emoji”成功,但第二个函数“Encode Emoji”失败并断言:

预期:[255、254、61、216、37、221]实际:[255、254、253、255、253、255]

所以在做了很多研究之后,我认为这是这个库中的一个错误。找到的代码有一个已停产包的分支 here

我现在做的解决方案是使用其他一些代码,仍然存在于 dart 库中。我在 SO post.

中找到了提示

然后我自己实现了一个新库,其他面临相同问题的人也可以使用。我根据 MIT 许可将其托管在 GitHub and pub.dev 上。