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