[问题] 如何知道utf8的字,所显示出来的宽窄?

楼主: Caesar08 (Caesar)   2016-05-29 19:19:39
问题(Question):
更新:
原来ptt根本没用east asian width
他就只是用isascii来决定这个字是宽的还窄的而已...
因为在内存上,文字是不需要对齐的,所以ptt不需要处理这问题
但是如果要显示出来,就会需要用到east asian width,以及font这些
更新:
https://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c就是east asian width
只不过不是最新版本的
更新:
在我实作east asian width后,
™还是被认为是中文字的宽度
我原本以为是unicode版本问题,但没想到一开始的设计
™就是ambiguous(ambiguous的意思就是,可能是narrow,但也可能是wide)
然而,█在分类上也是ambiguous,但是在ptt上的显示却是wide
难道ptt用wcswidth之类的?
原文:
如题,当我用terminal时(或windows的记事本)

^ 这边不能打字
这个字虽然在utf8底下是3 byte,但是它显示出来的效果却跟英文字一样
但是
ˇ
这个字虽然在utf8底下是2 byte,但是它显示出来的效果却跟中文字一样
我要怎么知道一个字在显示出来时
到底是跟英文字一样(窄),还是跟中文字(宽)一样呢?
注:
我知道一个utf8可以是1~4 byte,我也知道如何决定他的byte数量
但我要的是它显示出来的"宽度"
作者: leicheong (睡魔)   2016-05-29 19:32:00
http://stackoverflow.com/questions/4063146/user2781185 的答案.噢, 你要display width的话有wcswidth()可用这会<wchar.h>里.
作者: uranusjr (←這人是超級笨蛋)   2016-05-29 20:22:00
如果你的“纯C++”是指要用标准库, 答案是没有不过其实 character width 有写在 Unicode 标准里, 只要用几个 if 很容易自己做一个函式出来例如这是 JavaScript https://goo.gl/dcDx5M
作者: MOONRAKER (㊣牛鹤鳗毛人)   2016-05-30 02:18:00
unicode病当然要用unicode药医 过分的洁癖是不健康的
作者: LPH66 (-6.2598534e+18f)   2016-05-30 05:45:00
你引的那个连结是全型半型, 跟你要问的 unicode 字宽不同

Links booklink

Contact Us: admin [ a t ] ucptt.com