Excel中如何获取55296至56319区间字符的Unicode编码
问题本质
5529656319是Unicode标准划定的**UTF-16高代理项专属区间**,对应码点值为U+D800U+DBFF,这类码点本身不对应任何可独立使用的合法字符,规范要求它必须和56320~57343区间的低代理项配对,才能表示基本多语言平面(BMP)以外的补充平面字符。
Excel自带的UNICODE()函数内置了Unicode合法性校验,遇到单独存在的高/低代理项内容时,会直接判定为无效Unicode字符返回#VALUE!,属于符合标准的正常表现,不是函数故障。
可实现全区间编码获取的方法
Excel没有内置函数可以直接读取这类非法代理项的原始编码值,可以通过VBA自定义函数实现,步骤如下:
- 按下
Alt+F11快捷键打开VBA编辑器,在左侧工程栏右键点击当前工作簿,选择「插入」-「模块」 - 在打开的模块代码编辑区粘贴以下代码:
Function GetRawCode(target As String) As Long ' 读取目标内容首个单元的原始UTF-16码元值,覆盖0~65535全区间 GetRawCode = AscW(target) End Function
- 保存文件为启用宏的工作簿格式(.xlsm)后,回到工作表即可直接调用
=GetRawCode(存放目标字符的单元格),即可准确返回包括代理项区间在内的所有0~65535编码对应的原始数值。
注意:单独的高/低代理项不属于合法Unicode字符,这类内容在跨软件复制、文件导出、网页传输场景下极易出现乱码、内容截断丢失问题,仅建议用于编码测试场景,不要在正式业务数据里使用这类字符。
内容的提问来源于stack exchange,提问作者8平民
相关产品推荐
相关产品推荐

