C++检查unicode字符是否为全宽

lin*_*ize 7 c++ unicode winapi mfc visual-c++

如何检查unicode字符是否为全宽?

我使用Win32/MFC

例如,?是全宽,A不是全宽,?是全宽,F不是全宽.

Igo*_*sky 8

你需要的是检索角色的东亚宽度.您可以通过解析Unicode字符数据库中的EastAsianWidth.txt文件来完成此操作.我找不到返回此信息的Win32 API,但在Python中,您可以使用unicodedata.east_asian_width(unichr).

有关问题的背景和更多信息,请参阅附录#11.


Jam*_*nze -4

“全宽”是什么意思?字符的宽度取决于其显示的字体。

如果你的意思是不是单字节字符,目前还不清楚。单字节字符采用什么编码?在 UTF-8 中,当(且仅当)代码点小于 128 时,它才是单字节字符;如果您使用 UTF-16(可能,因为您在 Windows 下),只需将字符与 128 进行比较。ISO 8859-1 中的单字节编码(另一种广泛传播的编码):与 256 进行比较。对于小于256,UTF-16 单位在数字上与 ISO 8859-1(有时称为 Latin-1)中的代码点相同。对于单字节编码 ASCII(现在几乎从未使用过,大多数常见编码在前 128 个代码点上与它相同),任何小于 128 的值都是好的。