iOS的Messages应用程序检测用户是否根据输入语言键入了unicode char。如果您更改为任何asien语言,您会看到要写入的最大字符数限制为70而不是160。同时如果你输入一个也被编码为unicode的笑脸,它只需要2个char值。我的问题是如何检测将我的最大消息长度限制为70的unicode字符?
答案 0 :(得分:1)
要检测键盘的当前语言,请参阅此处 Detecting unicode chars of asian languages typed to UITextfield
对于动态计算,将字符串转换为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个字符需要两个字节进行编码。这涵盖了几乎所有拉丁衍生字母的其余部分,以及希腊语,西里尔语,科普特语,亚美尼亚语,希伯来语,阿拉伯语,叙利亚语和Tāna字母,以及结合变音符号。基本多语言平面的其余部分(其中包含几乎所有常用字符)中的字符需要三个字节。 Unicode的其他平面中的字符需要四个字节,其中包括不太常见的CJK字符和各种历史脚本和数学符号。
如果你的字符串包含来自特定unicode集的任何字符
,你可以检查这样的字符串NSRange range = 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);