1

我有一个搜索栏,用户可以输入英文、中文或拼音。将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 对我来说是一个新领域。

4

1 回答 1

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

结果:\u4f60\u600e\u4e48\u6837

或者

+ (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

来源

于 2013-09-28T20:21:12.290 回答