我正在尝试读取从iphone上的Java服务器发送的UTF-8数据
uint8_t buf[1024];
unsigned int len = 0;
len = [(NSInputStream *)stream read:buf maxLength:1024];
if(len) {
用这个:
NSString *chrStr = [[NSString alloc] initWithBytes:(const void *)buf length:len encoding:NSUTF8StringEncoding];
当buf的长度< 129,转换没问题。但如果长度> 129,chrStr返回null
如果我通过NSASCIIStringEncoding更改编码:
NSString *chrStr = [[NSString alloc] initWithBytes:(const void *)buf length:len encoding:NSASCIIStringEncoding];
转换没有长度&gt; 129但是UTF8字符不正确:(
抱歉我的英语。答案 0 :(得分:2)
-[NSString initWithBytes:length:encoding:NSUTF8StringEncoding]
适用于长度超过129个字节的字符串。
你的问题在别处。
编辑以回答评论:
正如我所说,你的问题起源不是来自长度,而是来自其他一些问题。正如@Bavarious推测的那样,你的字符串可能不是有效的UTF-8。
以下代码按预期工作:
const char* c_string = "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
NSString *string = [[[NSString alloc] initWithBytes:c_string
length:strlen(c_string)
encoding:NSUTF8StringEncoding] autorelease];
assert([string length] == strlen(c_string)); // only valid for ASCII
如果您仍然认为 - [NSString initWithBytes:length:encoding:]可能无法正常工作,请将代码与相关字符串一起发布。
答案 1 :(得分:1)
也许你正在将部分UTF8字符串读入“buf”。即,在下一次从流中读取时,您可能会得到一些尾随字节,因为您的UTF-8编码字符已在中间分割。