[問題] 如何知道utf8的字,所顯示出來的寬窄?

看板C_and_CPP作者 (Caesar)時間9年前 (2016/05/29 19:19), 9年前編輯推噓3(307)
留言10則, 4人參與, 最新討論串1/1
問題(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://www.ptt.cc/bbs/C_and_CPP/M.1464520781.A.9EA.html


05/29 19:33, , 2F
user2781185 的答案.
05/29 19:33, 2F

05/29 19:37, , 3F
噢, 你要display width的話有wcswidth()可用
05/29 19:37, 3F

05/29 19:38, , 4F
這會<wchar.h>裡.
05/29 19:38, 4F
我會再找找有沒有純C++的解法

05/29 20:22, , 5F
如果你的「純C++」是指要用標準庫, 答案是沒有
05/29 20:22, 5F
QQ 那只好妥協了...

05/29 20:45, , 6F
不過其實 character width 有寫在 Unicode 標準裡, 只要
05/29 20:45, 6F

05/29 20:46, , 7F
用幾個 if 很容易自己做一個函式出來
05/29 20:46, 7F

05/29 20:49, , 8F
例如這是 JavaScript https://goo.gl/dcDx5M
05/29 20:49, 8F

05/30 02:18, , 9F
unicode病當然要用unicode藥醫 過分的潔癖是不健康的
05/30 02:18, 9F
你是說只用C++去做嗎 XD

05/30 05:45, , 10F
你引的那個連結是全型半型, 跟你要問的 unicode 字寬不同
05/30 05:45, 10F
已刪掉連結 ※ 編輯: Caesar08 (140.114.233.71), 07/31/2016 22:17:25
文章代碼(AID): #1NIj1Ddg (C_and_CPP)