【问题标题】:Convert unicode string to utf8将 unicode 字符串转换为 utf8
【发布时间】:2011-04-26 14:50:43
【问题描述】:

当我得到一个 \u043F\u043F (Unicode) 形式的字符串时,如何将它转换为可读的 NSUT8String?这是我的代码(当这些是非英文字符时会失败):

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{

    NSString *theStr = [[NSString alloc]  initWithBytes:[receivedData bytes]
                                                  length:[receivedData length] encoding: NSUTF8StringEncoding];

    NSLog(theStr);
}

当字符串是英文字符时,一切都很好 - 但是当它是 Unicode 格式时,它无法给我一个可读的字符串(但仍然是 Unicode 格式)。

你怎么看?


编辑:

我意识到我没有提供足够的信息来说明我正在尝试做什么。当您使用搜索框时,我正在尝试使用 youtube 获取自动建议关键字的方式(没有官方信息,只是使用嗅探器来查找)。这里是:

http://suggestqueries.google.com/complete/search?hl=en&client=youtube&hjson=t&ds=yt&jsonp=window.yt.www.suggest.handleResponse&q=*******&cp=******

q 是您的查询,cp 是 q 的长度。

所以基本上,当 q 是英文的东西时,它可以正常工作。但是当 q 有非英文字符(例如俄语)时,这就是我得到的(来自 NSLog):

window.yt.www.suggest.handleResponse(["\u043F\u0440",[["\u043F\u0440\u0438\u043A\u043E\u043B\u044B","","0"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D","","1"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 87","","2"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 88","","3"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 86","","4"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 85","","5"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 89","","6"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 84","","7"],["\u043F\u0440\u0438\u043A\u043E\u043B\u044B \u0432 \u043F\u0440\u044F\u043C\u043E\u043C \u044D\u0444\u0438\u0440\u0435","","8"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 90","","9"]],{}])

【问题讨论】:

    标签: iphone unicode utf-8 nsstring


    【解决方案1】:

    你可以使用:

    @interface NSString 
    {
         - (__strong const char *)UTF8String;  // Convenience to return
                                               // null-terminated UTF8 representation
    }
    

    【讨论】:

      【解决方案2】:

      我认为这可能会有所帮助..

      NSString *yourString = "\u043F\u0440\u0438\u043A\u043E\u043B\u044B";
      NSArray *unicodeArray = [yourString componentsSeparatedByString:@"\\u"];
      NSMutableString *finalString = [[NSMutableString alloc] initWithString:@""];
      for (NSString *unicodeString in unicodeArray) {
          if (![unicodeString isEqualToString:@""]) {
              unichar codeValue;
              [[NSScanner scannerWithString:unicodeString] scanHexInt:&codeValue];
              NSString* betaString = [NSString stringWithCharacters:&codeValue length:1]; 
              [finalString appendString:betaString];
          }
      } 
      //finalString should have encoded one
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-29
        • 2021-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-04
        相关资源
        最近更新 更多