【问题标题】:Convert NSString to unicode with escape使用转义将 NSString 转换为 unicode
【发布时间】:2013-03-14 16:45:45
【问题描述】:
NSString *string1 = @"\u03C0";
NSLog(@"string1: %@", string1);  // result of a Pi symbol

NSString *string2 = @"03C0";
NSString *string3 = [@"\\u" stringByAppendingString:string2];
NSLog(@"string3: %@", string3);  // result of \u03C0 but need it to be a Pi symbol as well

我认为 string3 会给出与 string1 相同的结果。但它没有。知道如何解决这个问题吗?

【问题讨论】:

    标签: ios objective-c unicode nsstring


    【解决方案1】:

    当您使用\u9999 键入字符串文字时,编译器会将其视为特殊字符文字。编译器会将该语法直接转换为结果字符。

    您的string3 正在运行时处理。 \u9999 语法在运行时没有特殊含义。

    你可以这样做:

    NSString *string2 = @"03C0";
    NSScanner *scanner = [NSScanner scannerWithString:string2];
    unsigned int code;
    [scanner scanHexInt:&code];
    NSString *string3 = [NSString stringWithFormat:@"%C", (unsigned short)code];
    NSLog(@"string3: %@", string3);
    

    如果你知道代码是\u03C0,那么你可以直接使用它:

    NSString *string3 = [NSString stringWithFormat:@"%C", (unsigned short)0x03C0];
    NSLog(@"string3: %@", string3);
    

    更好的是,直接输入:

    NSString *string3 = @"π";
    NSLog(@"string3: %@", string3);
    

    【讨论】:

    【解决方案2】:

    \u03C0一个 单个 Unicode 字符,即 pi 字符的另一种表示形式。字符串“\”、“u”等是另一回事。

    【讨论】:

      【解决方案3】:

      答案就在你的问题中。

      你说这是 UNICODE 字符 \u03C0,而不是 UNICODE 字符串。

      因此,当您使用stringByAppendingString: 时,它会将string 返回到string3,而不是字符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-26
        • 1970-01-01
        • 2014-09-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多