【问题标题】:NSString replace unicode charactersNSString 替换 unicode 字符
【发布时间】:2011-07-15 09:00:41
【问题描述】:

我正在使用服务器,我必须将文本下载到我的 iOS 应用程序。唯一的问题:例如,所有像“é à ç”这样的字符都被替换为“\U008”。有没有办法解决这个问题,用正确的字符替换这段代码?

【问题讨论】:

    标签: ios unicode nsstring character


    【解决方案1】:

    尝试用这个解析接收到的文本(textToParse 变量):

    NSString *encodedString = textToParse;
    NSString *decodedString = [NSString stringWithUTF8String:[encodedString cStringUsingEncoding:[NSString defaultCStringEncoding]]];
    

    【讨论】:

    • 它崩溃了:[NSString stringWithUTF8String:]: NULL cString
    【解决方案2】:

    我测试了一些编码,NSMacOSRomanStringEncoding 很合适。

    我的测试是:

    NSString *encodedString = [NSString stringWithCString:"Você realmente deseja sair da área restrita" encoding:NSMacOSRomanStringEncoding];
    

    请记住,消息必须是 C 字符串 ("string") 而不是 NSString(@"string")

    【讨论】:

      【解决方案3】:

      您可以像这样获取字符缓冲区并验证每个字符:

      - (NSString *) removeUnicode:(NSString *) unicodeString {
          NSUInteger len = [unicodeString length];
          unichar buffer[len+1];
      
          [unicodeString getCharacters:buffer range:NSMakeRange(0, len)];
      
          unichar okBuffer[len+1];
          int index = 0;
          for(int i = 0; i < len; i++) {
              if(buffer[i] < 128) {
                  okBuffer[index] = buffer[i];
                  index = index + 1;
              }
          }
      
          NSString *removedUnicode = [[NSString alloc] initWithCharacters:okBuffer length:index];
      
          return removedUnicode;
      }
      

      或者您可以使用此示例:

      NSCharacterSet *notAllowedChars = [[NSCharacterSet characterSetWithCharactersInString:[NSCharacterSet alphanumericCharacterSet]] invertedSet];
      stringWithOutUnicode = [[stringWithUnicode componentsSeparatedByCharactersInSet:notAllowedChars] componentsJoinedByString:@""];
      

      您可以创建自己的有效字符集并获取不允许的字符

      NSString *allowedCharacters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
      NSCharacterSet *notAllowedChars = [[NSCharacterSet characterSetWithCharactersInString: allowedCharacters] invertedSet];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-20
        • 2018-04-19
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-01
        相关资源
        最近更新 更多