我正在编写一个应该包装任意 unicode 文本的终端(控制台)应用程序。
终端通常使用等宽(固定宽度)字体,因此要换行文本,只需计算字符数并观察单词是否适合一行并采取相应措施。
问题是 Unicode 表中有全角字符占用了终端中 2 个字符的宽度。
计算这些会看到 1 个 unicode 字符,但打印的字符是 2 个“正常”(半角)字符宽,因为它不知道占用两倍宽度的字符,所以会破坏包装例程。
例如,这是一个全角字符(U+3004,JIS 符号)
〄 12
尽管它是预先格式化的,但它在这里并不占用 2 个字符的全部宽度,但它确实使用了终端中西方字符宽度的两倍。
为了解决这个问题,我必须区分全角或半角字符,但我在 C++ 中找不到这样做的方法。真的有必要知道 unicode 表中的所有全角字符来解决这个问题吗?