我試圖在用戶可見的字形中獲取JavaScript字符串的長度,即忽略組合字符(和代理對?)。這是否可能,如果是的話,我會怎麼做呢?在JavaScript字符串中獲取字符字符數?
我們在我們的項目中使用dojo工具包,但任何一般的javascript解決方案都會很棒。
我試圖在用戶可見的字形中獲取JavaScript字符串的長度,即忽略組合字符(和代理對?)。這是否可能,如果是的話,我會怎麼做呢?在JavaScript字符串中獲取字符字符數?
我們在我們的項目中使用dojo工具包,但任何一般的javascript解決方案都會很棒。
對於組合字符,請看Derived Combining Class,其中列出了所有組合字符(等等)。既然你只是對計算感興趣,你可以將它們排除 - 讓你略微接近估計。
在由Angus鏈接的帖子中,JavaScript strings outside of the BMP顯示了處理代理的代碼。但是代碼實際上與你想要的相反 - 它將0x10000 +代碼點分成兩個代碼點。就JS而言,它是一個代碼點 - 儘管是一個截斷點。誰在乎?你正在數它們,而不是顯示...
但是,還有另一類代碼點,你可能也想處理,非打印字符。當然,在0x20以下的任何東西,但還有很多其他的 - 例如看看0x2000範圍。這些都不可見,不應包含在您的計數中。
感謝您的信息,當時我沒有注意到鏈接的問題有示例代碼,我仔細研究過它,並認爲JS無法處理將需要的低級別字符串內容。 – Angus 2012-09-06 21:19:54
這個開源的CoffeeScript實現似乎足夠體面的工作:https://github.com/devongovett/grapheme-breaker(只要它不是CS)
這是一個純粹的JavaScript庫,做到了這一點:
https://github.com/orling/grapheme-splitter
它在所有邊緣情況下實現Unicode UAX-29標準,您可能會在家庭衝突解決方案中錯過,例如非拉丁語變音符號,韓文朝鮮字符,表情符號,多個組合標記等。
安轉向這個問題:http://stackoverflow.com/q/3744721/1352254包括JavaScript使用UCS-2而不是UTF-16的有用信息,並指出這是不可能的。 – Angus 2012-04-24 14:54:52
這將是可能的,它不會很容易,因爲你必須處理一些低級的Unicode問題。 – hippietrail 2014-01-28 05:11:35