1

ユーザーが英語、中国語、またはピンインで入力できる検索バーがあります。はUISearchBar文字列を として返しますNSString。文字列で行う必要があるのは、文字列を UTF-8 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 に答える