作者Caesar08 (Caesar)
看板C_and_CPP
标题[问题] 如何知道utf8的字,所显示出来的宽窄?
时间Sun May 29 19:19:39 2016
问题(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数量
但我要的是它显示出来的"宽度"
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.171.71.131
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1464520781.A.9EA.html
2F:→ leicheong: user2781185 的答案. 05/29 19:33
3F:推 leicheong: 噢, 你要display width的话有wcswidth()可用 05/29 19:37
4F:→ leicheong: 这会<wchar.h>里. 05/29 19:38
我会再找找有没有纯C++的解法
5F:→ uranusjr: 如果你的「纯C++」是指要用标准库, 答案是没有 05/29 20:22
QQ
那只好妥协了...
6F:→ uranusjr: 不过其实 character width 有写在 Unicode 标准里, 只要 05/29 20:45
7F:→ uranusjr: 用几个 if 很容易自己做一个函式出来 05/29 20:46
找到了
http://www.unicode.org/reports/tr11/
http://www.unicode.org/Public/UCD/latest/ucd/EastAsianWidth.txt
9F:→ MOONRAKER: unicode病当然要用unicode药医 过分的洁癖是不健康的 05/30 02:18
你是说只用C++去做吗 XD
10F:推 LPH66: 你引的那个连结是全型半型, 跟你要问的 unicode 字宽不同 05/30 05:45
已删掉连结
※ 编辑: Caesar08 (140.114.233.71), 07/31/2016 22:17:25