0

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

4

1 回答 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 回答