NSStream,UTF8String和NSString ......凌乱的转换

Dut*_*432 1 iphone utf-8 nsstring nsstream

我正在构建一个通过NSStream发送到服务器的数据包.我试图用'§'(ascii代码167)分隔两个数据.这是服务器的构建方式,所以我需要尽量保持在这些范围内......

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]];  
Run Code Online (Sandbox Code Playgroud)

所以最终结果看起来应该是这样的......当sendData首次构造时它会这样做:

USER User§Pass 
Run Code Online (Sandbox Code Playgroud)

但是,当它在服务器端收到时,它看起来像这样:

//not a direct copy and paste. The 'mystery character' may not be exact
USER UserˤPas
Run Code Online (Sandbox Code Playgroud)

...分隔符字符串的长度变为两个,最后一个字母从命令中被裁剪.我相信这是UTF8转换的原因.

任何人都可以为我阐明这一点吗?

任何帮助将不胜感激!

Rob*_*ier 6

对于这个字符,UTF-8中的正确编码是双字节序列0xC2 0xA7,这是你得到的.(Fileformat.info对于这些东西是非常宝贵的.)这是LATIN-1集合之外的所以你几乎肯定想要使用NSISOLatin1StringEncoding而不是NSUTF8StringEncoding来获得单字节167编码.看看NSString -dataUsingEncoding:.

  • NSStream没有write方法,我假设你的意思是[NSOutputStream write].它接受const uint8_t*和一个长度.const uint8_t*不是UTF-8字符串,它是一个字节数组. (2认同)