UISearchBar输入字符串以转义unicode字符

时间:2013-09-28 20:07:57

标签: ios objective-c unicode

我有一个搜索栏,用户可以输入英文,中文或拼音。 UISearchBar将字符串作为NSString返回。我需要对字符串执行的操作是将其转换为UTF-8 unicode字符,但仅适用于中文和拼音中使用的字符。

以下是几个场景。我只是在打字时编写的unicode所以它不正确,但我只是以它为例,结果是重要的。

   SEARCH INPUT   |      NSString should look like              
+-----------------+-------------------------------------------+
| hello world     |  hello world                              |
+-----------------+-------------------------------------------+
| Nǐ zěnme yàng   |  N\u3435 z\u2343nme y\u1111ng             |
+-----------------+-------------------------------------------+
| 你怎么样         |  \u3435\u9995\u3885\u3445                 |
+-----------------+-------------------------------------------+

我已经使用JavaScript和PHP成功完成了这项工作,但Objective-C对我来说是一个新的领域。

1 个答案:

答案 0 :(得分:2)

NSData *dataString = [@"你怎么样" dataUsingEncoding:NSNonLossyASCIIStringEncoding allowLossyConversion:NO];
    NSString *cleanedString = [[NSString alloc] initWithData:dataString encoding:NSASCIIStringEncoding];

结果:\u4f60\u600e\u4e48\u6837

OR

+ (NSString*) escapeUnicodeString:(NSString*)string
{
    NSString* escapedString = [string stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"];
    escapedString = [escapedString stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
    NSData* data = [escapedString dataUsingEncoding:NSUTF16LittleEndianStringEncoding allowLossyConversion:YES];
    size_t bytesRead = 0;
    const char* bytes = data.bytes;
    NSMutableString* encodedString = [NSMutableString string];
    while (bytesRead < data.length)
    {
        uint16_t code = *((uint16_t*) &bytes[bytesRead]);
        if (code > 0x007E)
        {
            [encodedString appendFormat:@"\\u%04X", code];
        }
        else
        {
            [encodedString appendFormat:@"%C", code];
        }
        bytesRead += sizeof(uint16_t);
    }
    return encodedString;
}

结果:\u4F60\u600E\u4E48\u6837

Source