iOS计算输入字符数
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
iOS計(jì)算輸入字符數(shù)
本文展示在iOS下,如何正確的計(jì)算輸入的字符個(gè)數(shù)。
常見編碼
漢字、中文符號(hào)
UTF-8編碼下,一個(gè)漢字,包括中文符號(hào)標(biāo)點(diǎn),占3個(gè)字節(jié)。 GBK、GB2312編碼下,是2個(gè)字節(jié)。
emoji表情
無論是UTF-8,還是GBK、GB2312,emoji表情都是占用4個(gè)字節(jié)。
iOS的設(shè)備編碼
iOS的設(shè)備,基本上都是使用UTF-8編碼,所以一個(gè)漢字是3個(gè)字節(jié)。
現(xiàn)狀
通常情況下,數(shù)據(jù)庫的存儲(chǔ),會(huì)使用UTF-8編碼。 而我們?cè)诰幊虝r(shí),會(huì)把一個(gè)漢字認(rèn)為是2個(gè)字節(jié)。
結(jié)論
因此,我們需要使用GBK的編碼,去判斷用戶輸入的字符個(gè)數(shù),以作限制。
1、獲取GBK編碼
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);2、使用GBK編碼作為 cStringUsingEncoding 方法的編譯,來獲取字符串的cString首個(gè)字符指針。
3、使用 lengthOfBytesUsingEncoding 獲取字節(jié)長度,然后遍歷,由此計(jì)算出所有字符長度。
代碼示例
將以下代碼放入NSString的category
- (NSUInteger)charactorNumber {NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);return [self charactorNumberWithEncoding:encoding]; }- (NSUInteger)charactorNumberWithEncoding:(NSStringEncoding)encoding {NSUInteger strLength = 0;char *p = (char *)[self cStringUsingEncoding:encoding];NSUInteger lengthOfBytes = [self lengthOfBytesUsingEncoding:encoding];for (int i = 0; i < lengthOfBytes; i++) {if (*p) {p++;strLength++;}else {p++;}}return strLength; }轉(zhuǎn)載于:https://my.oschina.net/u/3729372/blog/1596610
總結(jié)
以上是生活随笔為你收集整理的iOS计算输入字符数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浏览器控件JxBrowser 6.18发
- 下一篇: elasticsearch-查询基础篇