Ios UISearchBar输入字符串到转义的unicode字符

Ios UISearchBar输入字符串到转义的unicode字符,ios,objective-c,unicode,Ios,Objective C,Unicode,我有一个搜索栏,用户可以键入英文、中文或拼音。ui搜索栏将字符串返回为NSString。我需要对字符串做的是将其转换为UTF-8 unicode字符,但仅用于中文和拼音中使用的字符 这里有几个场景。我刚在打字时拼凑的unicode是不正确的,但我只是用它作为例子,结果才是最重要的 搜索输入| NSString应该如下所示 +-----------------+-------------------------------------------+ |你好世界|你好世界| +-----------

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

这里有几个场景。我刚在打字时拼凑的unicode是不正确的,但我只是用它作为例子,结果才是最重要的

搜索输入| NSString应该如下所示
+-----------------+-------------------------------------------+
|你好世界|你好世界|
+-----------------+-------------------------------------------+
|Nǐzěnme yáng|N\u3435 z\u2343nm y\u1111ng|
+-----------------+-------------------------------------------+
| 你怎么样         |  \u3435\u9995\u3885\u3445|
+-----------------+-------------------------------------------+
我已经用JavaScript和PHP成功地做到了这一点,但Objective-C对我来说是一个新领域

NSData *dataString = [@"你怎么样" dataUsingEncoding:NSNonLossyASCIIStringEncoding allowLossyConversion:NO];
    NSString *cleanedString = [[NSString alloc] initWithData:dataString encoding:NSASCIIStringEncoding];
结果:
\u4f60\u600e\u4e48\u6837

+(NSString*)escapeUnicodeString:(NSString*)字符串
{
NSString*escapedString=[字符串StringByReplacingOfString:@“\\”和字符串:@“\\\\”];
escapedString=[escapedString StringByReplacingOfString:@“\\”with String:@“\\\”;
NSData*data=[escapedString dataUsingEncoding:NSUTF16LittleEndianStringEncoding allowLossyConversion:YES];
大小字节读取=0;
常量字符*字节=data.bytes;
NSMutableString*encodedString=[NSMutableString];
while(字节读取<数据长度)
{
uint16_t code=*((uint16_t*)和字节[bytesRead]);
如果(代码>0x007E)
{
[编码字符串格式:@“\\u%04X”,代码];
}
其他的
{
[编码字符串格式:@“%C”,代码];
}
字节读取+=sizeof(uint16_t);
}
返回编码环;
}
结果:
\u4F60\u600E\u4E48\u6837


太棒了,+(NSString*)escapeUnicodeString:(NSString*)string就是它的功用,谢谢,谢谢,谢谢!!!!!!!!!!!你用你的方法救了我的命,谢谢你,伙计;)
+ (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;
}