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

UTF-8无代理对,为何char.GetUnicodeCategory返回Surrogate?

为什么输出“Surrogate”?
  • 首先得明确:UTF-8确实没有代理对的概念,但C#里的string类型本质是用UTF-16编码存储字符的。
  • 你用的😀对应的Unicode码位是U+1F600,属于辅助平面字符(不在基本多语言平面BMP范围内,BMP覆盖U+0000到U+FFFF)。
  • UTF-16为了表示BMP之外的字符,会用两个16位的“代理字符”组合来实现:一个是高代理(范围U+D800到U+DBFF),一个是低代理(范围U+DC00到U+DFFF)。这两个字符单独拿出来属于无效的Unicode字符,分类就是Surrogate。
  • 你的代码流程:把😀转成UTF-8字节后再转回string,得到的还是原本基于UTF-16编码的字符串。遍历这个字符串时,自然会拿到组成😀的两个代理字符,所以每次输出都是Surrogate。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 03:42:35