【问题标题】:Converting UTF8 Hex string to regular UTF8 encoded NSString将 UTF8 十六进制字符串转换为常规 UTF8 编码的 NSString
【发布时间】:2013-05-27 09:55:48
【问题描述】:

我正在从服务器返回 UTF-8(十六进制):Hc3b8rt,而不是字符串“Hørt”。 我需要将此响应转换为常规 UTF-8。

我尝试过的:

NSString *string = [dict objectForKey:@"suggest"];

const char *cfilename=[string UTF8String];

NSString *str = [NSString stringWithUTF8String:cfilename];

感谢您的宝贵时间!

【问题讨论】:

  • 如果这就是你真正得到的结果,你如何判断 abba 是一个流行乐队还是两个十六进制字符?
  • 您从服务器接收的字符串是“Hc3b8rt”还是“H\xC3\xB8rt”?

标签: iphone ios objective-c utf-8 nsstring


【解决方案1】:

你无法解码。正如@JoachimIsaksson 在上面的 cmets 中所述,您如何判断“abba”是“abba”还是两个 unicode 字符?

【讨论】:

    【解决方案2】:

    使用字符串编码,NSISOLatin1StringEncoding

     - (id)initWithCString:(const char *)nullTerminatedCString 
                  encoding:(NSStringEncoding)encoding
    

    或者很快,

    NSString *str = [NSString stringWithCString:cfilename 
                                       encoding:NSISOLatin1StringEncoding];
    

    在 cmets 之后编辑:

    这有点奇怪。我在你的 cmets 之后做了一些实验,发现了一些奇怪的行为。

    - (void) testStringEncodingOK {
        NSString *string = @"h\u00c3\u00a5r";
        const char *cfilename=[string cStringUsingEncoding:NSISOLatin1StringEncoding];
        NSString *cs = [NSString stringWithUTF8String:cfilename];
        NSLog(@"String: %@", cs);
    }
    

    这个输出:hår

    但是如果你得到大写的\U,而不是\u,那么我将它们替换为\u。然后它没有用。看来,

    - (void) testStringEncodingConfused {
        NSString *string = @"h\\U00c3\\U00a5r";
        string = [string stringByReplacingOccurrencesOfString:@"\\U" withString:@"\\u"];
    NSLog(@"Original string:%@", string); // now string = @"h\u00c3\u00a5r"
        const char *cfilename=[string cStringUsingEncoding:NSISOLatin1StringEncoding];
        NSString *cs = [NSString stringWithUTF8String:cfilename];
        NSLog(@"String: %@", cs);
    }
    

    输出是,h\u00c3\u00a5r

    【讨论】:

    • 嗯。您的服务器发送的是 Hc3b8rt 而不是“H\xC3\xB8rt”,那么它有点复杂。我猜服务器应该发送编码字符串。
    • 它实际上也发送了 h\U00c3\U00a5r。应该是“hår”。
    【解决方案3】:

    使用下面的代码..

      const char *ch = [yourstring cStringUsingEncoding:NSISOLatin1StringEncoding];
    
      yourstring = [[NSString alloc]initWithCString:ch encoding:NSUTF8StringEncoding];
    
       NSLog(@"%@",yourstring);
    

    让我知道它是否有效...

    快乐编码....

    【讨论】:

    【解决方案4】:

    使用此代码

    NSString *string = [dict objectForKey:@"suggest"];
    
    const char *cfilename=[string stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    
    NSString *str = [NSString stringWithUTF8String:cfilename];
    

    并判断它是否工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      • 2014-03-10
      相关资源
      最近更新 更多