在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
相关产品推荐
相关产品推荐

