【发布时间】:2018-03-29 23:34:23
【问题描述】:
我有用于打印数字的自定义打印功能。我制作了一个 ASCII 版本和一个 UTF-16LE 版本。 UTF-16LE 版本对 0-9 使用全角代码/字符,对十六进制使用 A-F。在调试我的函数时,我注意到 Visual Studio 中的字符看起来与 ASCII 字符有点不同,虽然这并没有打扰我,但它让我开始思考。所以我决定在谷歌上快速搜索“Unicode 半角与全角”
...我发现有几页谈论“全宽”形式指的是字符的 Visual 宽度,而我认为“全宽”指的是编码的宽度(2字节或更多)...
以下是其中的几页和引述:
- https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms
-
ICU Unicode Normal vs Fullwidth
为了使排列整齐,IBM 定义了一组“全角”(最好是“双角”)字母和数字。
-
https://en.wikipedia.org/wiki/Half-width_kana
半角假名是以正常宽度的一半显示的片假名字符(纵横比为 1:2),而不是通常的方形 (1:1) 纵横比。例如,片假名ka的通常(全角)形式是カ,而半角形式是カ。
当我们有不同的 Fonts 用于大小和对齐时,"Fullwidth" 指代视觉宽度对我来说没有意义。
所以:
A - 谁能给我一个很好的答案,为什么“全宽”指的是视觉宽度。 Unicode UTF-16 规范中的什么地方是这样说的?
B - 作为开发人员/程序员,是否可以选择使用标志输出为半角或全角?
【问题讨论】:
-
FWIW,半角假名专门讨论日文假名。这与您的要求无关。
-
您所讨论的字符的确切代码点是什么?
-
@MarkRansom U+FF10 - U+FF19(0-9 拉丁语)、U+FF21 - U+FF26(A-F 拉丁语)和 U+FF41 - U+FF46(a-f 拉丁语).. . Codepoints 对我来说仍然是一个新术语,但我认为这就是您的要求。
-
看看:fileformat.info/info/unicode/char/ff10/index.htm 在此上下文中,half 和 full 指的是字符的图形表示。你可能想使用这个字符 U+0030(到 U+0039)fileformat.info/info/unicode/char/0030/index.htm
-
这是它们存在的原因:stackoverflow.com/q/4622357/235698
标签: c++ unicode printf utf-16le full-width