You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

UTF-16LE半角与全角字符的含义?自定义打印函数技术问询

调试全宽/半宽Unicode字符显示差异的小总结

最近我开发了一个自定义的数字打印函数,做了两个版本:一个是基于常规ASCII字符的基础版,另一个是UTF-16LE编码的版本——这个版本专门用全宽字符(0-9和十六进制A-F的全宽形式)来输出数字。

调试的时候发现个有意思的小细节:在Visual Studio里,这些全宽字符和对应的ASCII半宽字符显示起来总有细微差别,虽然完全不影响功能,但还是勾起了我的好奇心,于是专门研究了「Unicode halfwidth vs fullwidth」相关内容,整理了几个关键点:

  • 半宽字符(Halfwidth):就是我们日常用的ASCII字符,每个字符占1字节(比如半宽'0'的编码是0x30),在编辑器、终端里默认占据1个字符宽度。
  • 全宽字符(Fullwidth):属于CJK兼容字符范畴,UTF-16下每个字符占2字节(比如全角'0'的编码是0xFF10),设计初衷是让拉丁字符和中文、日文等CJK文字保持等宽,所以显示时会占2个半宽字符的宽度,这也是VS里看起来和半宽字符有差异的核心原因。
  • 注意事项:全宽和半宽的对应字符(比如'A'和'A')是完全不同的Unicode码点,处理字符串时千万别直接混着比较,得先做转码统一才行。

内容的提问来源于stack exchange,提问作者b.sullender

火山引擎 最新活动