代码之家  ›  专栏  ›  技术社区  ›  Dutchie432

NSStream、UTF8String和NSString…混乱转换

  •  1
  • Dutchie432  · 技术社区  · 16 年前

    unichar asciiChar = 167;  //yields @"§"
    [self setSepString:[NSString stringWithCharacters:&asciiChar length:1]]; 
    
    sendData=[NSString stringWithFormat:@"USER User%@Pass", sepString];
    
    NSLog(sendData);
    
    const uint8_t *rawString=(const uint8_t *)[sendData UTF8String];
    
    [oStream write:rawString maxLength:[sendData length]];  
    

    所以最终结果应该是这样的。.并且在首次构造sendData时会这样做:

    USER User§Pass 
    

    //not a direct copy and paste. The 'mystery character' may not be exact
    USER UserˤPas
    

    有人能为我解释一下吗?

    任何帮助都将不胜感激!

    2 回复  |  直到 16 年前
        1
  •  6
  •   Rob Napier    16 年前

    Fileformat.info 对这些东西来说是无价的。)这超出了LATIN-1集,因此您几乎肯定希望使用NSISOLatin1StringEncoding而不是NSUTF8StringEncoding来获得单字节167编码。看 NSString -dataUsingEncoding: .

        2
  •  1
  •   Jared Oberhaus    16 年前

    你所拥有和想要传输的并不是真正的UTF-8字符串,从技术上讲,它也不是我们的ascii,因为它只有7位。您希望根据所使用的协议传输任意字节数组。字节数组的两个字段,用户名和密码,本身可能是UTF-8字符串,但 167

    以下是我看到的一些选项:

    • 构建 uint8_t* 使用至少两个不同的字节数组 NSString 167
    • 使用 NSString 方法 getBytes:maxLength:usedLength:encoding:options:range:remainingRange 并设置 encoding NSASCIIStringEncoding 。如果您这样做,您必须在其他地方验证您的用户名和密码是否仅限美国ascii码。
    • 使用 NSString 方法 getCString 。但是,这已被弃用,因为您无法指定所需的编码。