You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Dart/Flutter中如何获取汉字的Unicode十进制/十六进制值

Dart/Flutter中获取汉字的Unicode码点

你之前用HEX.encode(utf8.encode("中"))得到的是UTF-8编码的字节十六进制,不是Unicode码点本身。原因很简单:

  • utf8.encode("中")会把汉字转换成UTF-8编码的字节数组,"中"的UTF-8是[0xE4, 0xB8, 0xAD],所以编码后得到e4b8ad,这是UTF-8字节的十六进制表示,而非Unicode码点。

要获取目标的Unicode十进制(20013)或十六进制(4E2D)值,直接操作字符的码点即可:

方法1:获取十进制Unicode码点

对于单个汉字(属于BMP平面,U+0000到U+FFFF),直接用codeUnitAt(0)就能拿到十进制码点:

String char = "中";
int decimalCode = char.codeUnitAt(0);
print(decimalCode); // 输出 20013

方法2:获取十六进制Unicode码点

把十进制码点转成十六进制字符串,再转大写就是你要的4E2D:

String hexCode = decimalCode.toRadixString(16).toUpperCase();
print(hexCode); // 输出 4E2D

注意:处理超出BMP的字符(如emoji、生僻字)

如果字符是超出U+FFFF的代理对字符(比如😀),codeUnitAt(0)只会返回高代理项,这时候要用runes.first获取完整的Unicode码点:

String emoji = "😀";
int emojiCode = emoji.runes.first;
print(emojiCode); // 输出 128512
print(emojiCode.toRadixString(16).toUpperCase()); // 输出 1F600

内容的提问来源于stack exchange,提问作者CloudWave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 08:47:03