2013-12-18 28 views
7

如何檢查unicode字符是否爲全寬?C++檢查unicode字符是否爲全寬

我使用的Win32/MFC

例如,是全寬,A不是全寬,是全寬,F不是全寬度。

+0

你確實意識到這個問題是無稽之談。如果你對編碼沒有任何瞭解,字符串就沒有任何意義。請看看這個不錯的藝術,這應該對此事提供一些啓示 - > http://www.joelonsoftware.com/articles/Unicode.html – Pandrei

+1

+1你的問題讓我今天去學習一些東西! – Roddy

+0

@Pandrei我不會推薦那篇文章。雖然它有一兩個有用的觀點,但也有一些錯誤:對於初學者來說,作者似乎不瞭解區別_UCS_和_UTF_。 –

回答

-2

你是什麼意思的「全寬」?字符 的寬度取決於它正在顯示的字體。

如果您的意思是它是否是單字節字符,它的 仍然不清楚。單字節字符在什麼編碼?在 UTF-8中,如果(且僅當)代碼點小於128,則它將是單字節字符;如果你使用UTF-16(可能的, 因爲你是在Windows下),只是比較 128的ISO 8859-1(另一種廣爲流傳 編碼)單字節編碼的字符:以256爲比較任何小於256的數字,UTF-16單位將在數字上與 ISO 8859-1(有時稱爲Latin-1)中的代碼點相同。對於編碼ASCII的單字節 (幾乎從未使用過,,但大部分 通用編碼與前128個編碼相同),小於128是好的。

+1

http://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms – Roddy

+0

@Roddy更有意義。我應該在我的Unicode編碼中查找他的第二個全角字符。 (當然,這基本上意味着沒有簡單的答案。) –

8

你需要的是檢索角色的East Asian Width。您可以通過解析Unicode字符數據庫中的EastAsianWidth.txt文件來完成此操作。我無法找到返回此信息的Win32 API,但在Python中,例如,您可以使用unicodedata.east_asian_width(unichr)

有關問題的背景和更多信息,請參閱Annex #11

+0

這是正確的答案。 FWIW:來自Unicode聯盟的各種文件都是爲了便於解析而設計的,所以從其生成C++表格不應該太困難。 (我爲其他許多文件完成了此工作。) –

+0

東亞以外是否還有其他語言使用全角字符? – linquize

+0

有關更完整的討論,請參閱此答案:http://stackoverflow.com/a/9145712/53974 – Blaisorblade