本文展现在iOS下,如何正确的计算输入的字符个数。数据库
UTF-8编码下,一个汉字,包括中文符号标点,占3个字节。 GBK、GB2312编码下,是2个字节。编程
不管是UTF-8,仍是GBK、GB2312,emoji表情都是占用4个字节。编码
iOS的设备,基本上都是使用UTF-8编码,因此一个汉字是3个字节。指针
一般状况下,数据库的存储,会使用UTF-8编码。 而咱们在编程时,会把一个汉字认为是2个字节。code
所以,咱们须要使用GBK的编码,去判断用户输入的字符个数,以做限制。字符串
一、获取GBK编码it
NSStringEncoding encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
二、使用GBK编码做为 cStringUsingEncoding
方法的编译,来获取字符串的cString首个字符指针。编译
三、使用 lengthOfBytesUsingEncoding
获取字节长度,而后遍历,由此计算出全部字符长度。emoji
将如下代码放入NSString的categorycoding
- (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; }