0

我有用于打印数字的自定义打印功能。我制作了一个 ASCII 版本和一个 UTF-16LE 版本。UTF-16LE 版本对 0-9 使用全角代码/字符,对十六进制使用 AF。在调试我的函数时,我注意到 Visual Studio 中的字符看起来与 ASCII 字符有点不同,虽然这并没有打扰我,但它让我开始思考。所以我决定在谷歌上快速搜索“Unicode 半角与全角”

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

以下是其中的几页和引述:

当我们有不同的字体大小和对齐方式时, “全宽”指的是视觉宽度对我来说没有意义。

所以:

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

B - 作为开发人员/程序员,是否可以选择使用标志输出为半角或全角?

4

2 回答 2

4

您发现的半角假名只是Halfwidth 和 fullwidth forms的一个子集,它是代码点/字形的属性,而不是编码的属性。UTF-16 是 Unicode 的编码之一。

这些字符存在的原因是因为Unicode 是为遗留字符集之间的无损来回转换而设计的。如果您仔细查看Unicode 块,您会发现有很多冗余字符,例如Ⅶ Ⅷ Ⅸ ㎆ ㎇ ㎎ ㎏ ㎐ Dz dz NJ...。它们都纯粹出于兼容性目的,因为它们已在某些字符集中使用。

另请参阅哪些问题导致人们使用日语专用编码而不是 Unicode?

作为开发人员/程序员,是否可以选择使用标志输出为半角或全角?

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

于 2018-03-30T03:19:22.673 回答
1

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

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

我发现很难想象现代代码中会出现在普通字符和全角字符之间进行选择的情况。它实际上仅用于遗留支持。

于 2018-03-30T02:50:56.970 回答