C#中如何将大于0xFFFF的Unicode字符数值转换为对应字符串
C# Unicode码点转字符串实现方案
方法1:调用内置API(推荐)
.NET 全家桶都内置了char.ConvertFromUtf32静态方法,直接传入32位Unicode码值即可返回对应字符串,兼容.NET Framework 2.0及以上、所有.NET Core、.NET 5+版本:
// 示例:转换U+20000为对应的"𠀀"字符串 int unicodeCode = 0x20000; string targetStr = char.ConvertFromUtf32(unicodeCode);
方法2:手动实现编码逻辑
如果需要自行实现转换,可按照UTF-16代理对的编码规则计算:
- 对于≤0xFFFF的基础平面字符,直接转成char再转字符串即可
- 对于≥0x10000的补充平面字符,先将码值减去0x10000,再分别计算高位代理和低位代理,最后将两个代理字符合并为字符串
实现代码如下:
public static string CodePointToString(int codePoint) { if (codePoint is < 0 or > 0x10FFFF) throw new ArgumentOutOfRangeException(nameof(codePoint), "不属于合法Unicode码点范围"); // 基础平面字符直接转换 if (codePoint <= 0xFFFF) return ((char)codePoint).ToString(); // 计算代理对 codePoint -= 0x10000; char highSurrogate = (char)(0xD800 + (codePoint >> 10)); char lowSurrogate = (char)(0xDC00 + (codePoint & 0x3FF)); return new string(new []{ highSurrogate, lowSurrogate }); }
注意事项
- 合法的Unicode码点范围是 0x0 ~ 0x10FFFF,输入超出范围会导致异常或乱码
- 两种方法对普通BMP字符和扩展平面字符都能正常适配
内容的提问来源于stack exchange,提问作者Abot Me
相关产品推荐
相关产品推荐

