【问题标题】:Why converting a char array to string creates a nil string? [duplicate]为什么将 char 数组转换为字符串会创建一个 nil 字符串? [复制]
【发布时间】:2013-10-08 22:05:45
【问题描述】:

这是我的字符数组返回的内容:

 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 而只是有一个空格时,此代码适用于某些情况。谁能解释为什么这可能是一个原因?

【问题讨论】:

  • @DietrichEpp,他分享的调试器输出有足够的信息来识别问题。 methodChars != NULLmethod == nilmethodChars 的值。其他代码无意义。

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


【解决方案1】:

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

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

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

【讨论】:

  • 我可以去掉这些字符而不是更改编码类型吗?与此类似的东西可以与一组字符一起使用吗? [nameChars stringByReplacingOccurrencesOfString:@"\u00a0" withString:@" "];
  • 会的,但何必呢?如果不间断空格以无效的 UTF-8 出现,迟早也会出现其他情况,除非您确保始终在数据库中存储正确的 UTF-8 字符串。
猜你喜欢
  • 2019-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-04
  • 2015-08-17
  • 2013-04-25
  • 2012-11-04
  • 1970-01-01
相关资源
最近更新 更多