2012-04-23 71 views
4

我試圖在用戶可見的字形中獲取JavaScript字符串的長度,即忽略組合字符(和代理對?)。這是否可能,如果是的話,我會怎麼做呢?在JavaScript字符串中獲取字符字符數?

我們在我們的項目中使用dojo工具包,但任何一般的javascript解決方案都會很棒。

+1

安轉向這個問題:http://stackoverflow.com/q/3744721/1352254包括JavaScript使用UCS-2而不是UTF-16的有用信息,並指出這是不可能的。 – Angus 2012-04-24 14:54:52

+0

這將是可能的,它不會很容易,因爲你必須處理一些低級的Unicode問題。 – hippietrail 2014-01-28 05:11:35

回答

1

對於組合字符,請看Derived Combining Class,其中列出了所有組合字符(等等)。既然你只是對計算感興趣,你可以將它們排除 - 讓你略微接近估計。

在由Angus鏈接的帖子中,JavaScript strings outside of the BMP顯示了處理代理的代碼。但是代碼實際上與你想要的相反 - 它將0x10000 +代碼點分成兩個代碼點。就JS而言,它是一個代碼點 - 儘管是一個截斷點。誰在乎?你正在數它們,而不是顯示...

但是,還有另一類代碼點,你可能也想處理,非打印字符。當然,在0x20以下的任何東西,但還有很多其他的 - 例如看看0x2000範圍。這些都不可見,不應包含在您的計數中。

+0

感謝您的信息,當時我沒有注意到鏈接的問題有示例代碼,我仔細研究過它,並認爲JS無法處理將需要的低級別字符串內容。 – Angus 2012-09-06 21:19:54

4

這是一個純粹的JavaScript庫,做到了這一點:

https://github.com/orling/grapheme-splitter

它在所有邊緣情況下實現Unicode UAX-29標準,您可能會在家庭衝突解決方案中錯過,例如非拉丁語變音符號,韓文朝鮮字符,表情符號,多個組合標記等。