iOS 的消息应用程序会根据输入语言检测用户是否输入了 unicode 字符。如果您更改为任何一种亚洲语言,您会看到要写入的最大字符数限制为 70 而不是 160。同时,如果您输入一个也被编码为 unicode 的笑脸,它只需要 2 个字符值。我的问题是如何检测将我的最大消息长度限制为 70 的 unicode 字符?
问问题
1065 次
1 回答
1
要检测键盘的当前语言,请参阅此处 检测输入到 UITextfield 的亚洲语言的 unicode 字符
对于动态计算,将字符串转换为 nsdata 并查找大小应该可以工作。
NSLog(@"%i", [@"a" dataUsingEncoding:NSUTF8StringEncoding].length);
给我 1
NSLog(@"%i", [@"aa" dataUsingEncoding:NSUTF8StringEncoding].length);
给我 2
NSLog(@"%i", [@"aö" dataUsingEncoding:NSUTF8StringEncoding].length);
给我 3
NSLog(@"%i", [@"草" dataUsingEncoding:NSUTF8StringEncoding].length);
给我 3
编辑:
占用 1 个空格是什么意思?来自http://en.wikipedia.org/wiki/UTF-8
前 128 个字符(US-ASCII)需要一个字节。接下来的 1,920 个字符需要两个字节来编码。这涵盖了几乎所有源自拉丁语的字母表的其余部分,以及希腊语、西里尔语、科普特语、亚美尼亚语、希伯来语、阿拉伯语、叙利亚语和塔纳语字母,以及组合变音符号。基本多语言平面的其余部分(其中包含几乎所有常用字符)中的字符需要三个字节。Unicode 其他平面中的字符需要四个字节,其中包括不太常见的 CJK 字符和各种历史脚本和数学符号。
如果它们包含来自特定 unicode 集的任何字符,您可以像这样检查您的字符串
NSRange 范围 = NSMakeRange(256, range.length -1);
NSLog(@"%i", [@"ı" rangeOfCharacterFromSet:[NSCharacterSet
characterSetWithRange:range]].location == NSNotFound);
NSLog(@"%i", [@"ö" rangeOfCharacterFromSet:[NSCharacterSet
characterSetWithRange:range]].location == NSNotFound);
NSLog(@"%i", [@"ab" rangeOfCharacterFromSet:[NSCharacterSet
characterSetWithRange:range]].location == NSNotFound);
于 2012-08-07T08:38:14.350 回答