2025-06-28
假設你有一串字串
String text = "Hello 👋🌍";
假如你使用
print(text.substring(6, 7));
你可能預期會得到 "👋",但實際上可能出現亂碼或截斷的 emoji,例如 �,這是因為:
substring()
是基於 code unit 索引,不理解一個 emoji 實際上可能是兩個或更多 code units。Runes
String text = "Hello 👋🌍";
var runes = text.runes.toList();
print(String.fromCharCode(runes[6])); // 👋
這樣就能正確取得一個 emoji,不會截斷字元。
characters
套件import 'package:characters/characters.dart';
String text = "Hello 👨👩👧👦";
var chars = text.characters.toList();
print(chars[6]); // 👨👩👧👦 ✅
當你的 Flutter 應用處理 emoji 或其他複合 Unicode 字元時,可以考慮使用以下方案:
這樣才能避免程式碼改變字串內容時造成亂碼