UTF-16LE 半角和全角?意义?

UTF-16LE Halfwidth vs Fullwidth? The meaning?

我有用于打印数字的自定义打印功能。我制作了一个 ASCII 版本和一个 UTF-16LE 版本。 UTF-16LE 版本对 0-9 使用 Fullwidth codes/characters,对十六进制使用 A-F。在调试我的函数时,我注意到 Visual Studio 中的字符看起来与 ASCII 字符略有不同,虽然这并没有打扰我,但它让我开始思考它。所以我决定快速 google 搜索“Unicode halfwidth vs fullwidth”

...我发现有几页讨论“全宽”形式指的是字符的 Visual 宽度,而我认为“全宽”指的是宽度编码(2 字节或更多)...

这里有几页和他们的引述:

当我们有不同的 Fonts 时,"Fullwidth" 指的是视觉宽度对我来说没有意义大小和对齐方式。

所以:

A - 谁能给我一个很好的答案,为什么“全宽”指的是视觉宽度。在 Unicode UTF-16 规范中的什么地方这样说?

B - 作为 Developer/Programmer,是否可以选择使用标志输出为半角或全角?

关于全角与半角的起源,您找到了自己的答案,所以我不会深入探讨。是的,指定是指字符的视觉宽度。抱歉,我没有任何官方参考资料。

Unicode 的目标之一是处理 round-trip 转换 from/to 任何遗留字符集而不会丢失。由于存在具有全角字符的遗留字符集,因此它们也必须是 Unicode 的一部分,否则它们将被错误地转换。

我很难想象在现代代码中您会想要在普通字符和全角字符之间做出选择的情况。它实际上仅用于旧版支持。

Half-width 您发现的假名只是 Halfwidth and fullwidth forms 的一个子集,它是 codepoint/glyph 的 属性,而不是编码。 UTF-16 是 Unicode 编码之一。

那些字符存在的原因是因为Unicode was designed for lossless back-and-forth conversion between legacy character sets. If you look closer at the Unicode blocks you'll see there are a lot of redundant characters like 。它们都是纯粹出于兼容性目的,因为它们已在某些字符集中使用。

另见 What issues lead people to use Japanese-specific encodings rather than Unicode?

As a Developer/Programmer, would having the choice to output as Halfwidth or Fullwidth using flags be desirable?

我个人认为没有理由使用它们,除非在极少数情况下,例如 displaying characters on a square grid。更糟糕的是,这些日语字符通常在没有清晰字体和抗锯齿(小尺寸)的情况下呈现,因此阅读时眼睛很痛。如果您在日本,您会注意到一些表格需要使用半角或全角字符而不自动转换,这很糟糕。