如何在 Flutter 中解码和编码 UTF-8 字符

Posted

技术标签:

【中文标题】如何在 Flutter 中解码和编码 UTF-8 字符【英文标题】:How to Decoding and encoding UTF-8 characters in flutter 【发布时间】:2022-01-13 23:02:15 【问题描述】:

如何使用 UTF-8 编码和解码相同的字符串。我正在尝试解码 UTF-8 格式的字符串

我有以下 UTF-8 字符串:-

List<int> utf8Bytes = [
  0xc3, 0x8e, 0xc3, 0xb1, 0xc5, 0xa3, 0xc3, 0xa9,
  0x72, 0xc3, 0xb1, 0xc3, 0xa5, 0xc5, 0xa3, 0xc3,
  0xae, 0xc3, 0xb6, 0xc3, 0xb1, 0xc3, 0xa5, 0xc4,
  0xbc, 0xc3, 0xae, 0xc5, 0xbe, 0xc3, 0xa5, 0xc5,
  0xa3, 0xc3, 0xae, 0xe1, 0xbb, 0x9d, 0xc3, 0xb1
];

有什么方法可以在 Dart 中解码这个 UTF-8 字符串?任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

使用 utf8.decode() 将 UTF8 编码的字节解码为 Dart 字符串:

List<int> utf8Bytes = [
  0xc3, 0x8e, 0xc3, 0xb1, 0xc5, 0xa3, 0xc3, 0xa9,
  0x72, 0xc3, 0xb1, 0xc3, 0xa5, 0xc5, 0xa3, 0xc3,
  0xae, 0xc3, 0xb6, 0xc3, 0xb1, 0xc3, 0xa5, 0xc4,
  0xbc, 0xc3, 0xae, 0xc5, 0xbe, 0xc3, 0xa5, 0xc5,
  0xa3, 0xc3, 0xae, 0xe1, 0xbb, 0x9d, 0xc3, 0xb1
];

var funnyWord = utf8.decode(utf8Bytes);

assert(funnyWord == 'Îñţérñåţîöñåļîžåţîờñ');

要将 UTF-8 字符流转换为 Dart 字符串,请将 utf8.decoder 指定为 Stream transform() 方法:

var lines = utf8.decoder
    .bind(inputStream)
    .transform(const LineSplitter());
try 
  await for (final line in lines) 
    print('Got $line.length characters from stream');
  
  print('file is now closed');
 catch (e) 
  print(e);

使用utf8.encode() 将 Dart 字符串编码为 UTF8 编码字节列表:

List<int> encoded = utf8.encode('Îñţérñåţîöñåļîžåţîờñ');

assert(encoded.length == utf8Bytes.length);
for (int i = 0; i < encoded.length; i++) 
  assert(encoded[i] == utf8Bytes[i]);

【讨论】:

以上是关于如何在 Flutter 中解码和编码 UTF-8 字符的主要内容,如果未能解决你的问题,请参考以下文章

在 iPhone 中使用 UTF-8 编码和解码

Unicode, UTF-8 and ASCII 编码问题

C# UTF-8 base64 编码在 PHP 中无法正确解码

Python解码和编码

在 Flutter 中编码/解码复杂的 Json

如何在python中对西班牙语进行编码和解码