检测键入UITextfield的亚洲语言的unicode字符

时间:2012-08-07 08:14:07

标签: ios encoding nsstring uitextfield char

iOS的Messages应用程序检测用户是否根据输入语言键入了unicode char。如果您更改为任何asien语言,您会看到要写入的最大字符数限制为70而不是160。同时如果你输入一个也被编码为unicode的笑脸,它只需要2个char值。我的问题是如何检测将我的最大消息长度限制为70的unicode字符?

1 个答案:

答案 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);
相关问题