为什么将char数组转换为字符串会创建一个nil字符串?

时间:2013-10-08 22:05:46

标签: ios objective-c utf-8 nsstring char

这是我的chars数组返回的内容:

 char *methodChars = (char *) sqlite3_column_text(statement, 3);
  

(char *)methodChars = 0x090f5e00“开始在一大锅开水中煮意大利面。\ xa0同时,用油和热量喷一个大锅。\ xa0 \ xa0加入洋葱和芹菜,用中火煮3分钟或直到软。\ xa0搅拌玉米粒。\ xa0将玉米粉放入一个小碗中,逐渐加入80毫升(1/3杯)牛奶,搅拌至均匀。\ xa0将剩余的牛奶和原料加入然后将锅逐渐加入玉米粉混合物,不断搅拌。\ xa0继续搅拌,直到酱汁沸腾并变稠。\ xa0从热源中取出并在奶酪中搅拌直至融化。\ xa0当面食变硬时,沥干并加入金枪鱼到锅里。\ xa0搅拌混合,立即服务。“

继承我转换它的地方,这就是我得到的:

NSString *method = [[NSString alloc] initWithUTF8String:methodChars];

这是我从方法中获得的:

  

有人可以解释原因,以及我如何解决这个问题?

此代码适用于某些情况,当methodChars不包含\xa0并且只是有空格时。谁能解释为什么这可能是一个原因?

1 个答案:

答案 0 :(得分:5)

您的字符串未以UTF-8编码:它包含字节\xa0。如果该字符串应该包含U + 00A0非中断空格字符,那么它应该被编码为\xc2\xa0

您可以使用\xa0映射到有效字符的编码创建字符串,例如:

NSString *method = [[NSString alloc] initWithCString:methodChars encoding:NSISOLatin1StringEncoding];