Flutter substring with emoji

2025-06-28

假設你有一串字串

String text = "Hello 👋🌍";

假如你使用

print(text.substring(6, 7));

你可能預期會得到 "👋",但實際上可能出現亂碼或截斷的 emoji,例如 �,這是因為:

方法1: 使用Runes

String text = "Hello 👋🌍";
var runes = text.runes.toList();

print(String.fromCharCode(runes[6])); // 👋

這樣就能正確取得一個 emoji,不會截斷字元。

方法2: 使用characters套件

import 'package:characters/characters.dart';

String text = "Hello 👨‍👩‍👧‍👦";
var chars = text.characters.toList();

print(chars[6]); // 👨‍👩‍👧‍👦 ✅

結論

當你的 Flutter 應用處理 emoji 或其他複合 Unicode 字元時,可以考慮使用以下方案:

這樣才能避免程式碼改變字串內容時造成亂碼