Ios 如何更改NSString编码

Ios 如何更改NSString编码,ios,encoding,nsstring,nsdata,Ios,Encoding,Nsstring,Nsdata,我有一个像这样的字符串 雪铁龙 这是Citron的ASCII码。因此,为了尝试将这个NSString转换成正确的形式,如下所示 string = [dict valueForKey:@"WIGMIGDIGFIG"]; //myBadString NSData *data = [string dataUsingEncoding:NSASCIIStringEncoding]; //sent it back to NSData with ACII encoding NSString* mystring

我有一个像这样的字符串

雪铁龙

这是Citron的ASCII码。因此,为了尝试将这个NSString转换成正确的形式,如下所示

string = [dict valueForKey:@"WIGMIGDIGFIG"]; //myBadString
NSData *data = [string dataUsingEncoding:NSASCIIStringEncoding];
//sent it back to NSData with ACII encoding
NSString* mystring = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// put it back into a NSString but with the correct encoding
NSLog(@"%@", mystring);// check result.
所以我通过一个循环来检查字典数组中的所有字符串,每个字符串都返回到日志中,接受一个包含Citroën的字符串。它只是从日志中漏掉了


更新的问题,有人知道我想做什么吗?我甚至不确定这是否可能。我所要做的就是修复已经创建的字符串,但显然编码不正确。

我刚刚尝试了您的示例,问题在于行:

NSData *data = [string dataUsingEncoding:NSASCIIStringEncoding];
如果我
NSLog
返回
数据的内容
nil
。这大概意味着“Citroën”不是一个有效的ASCII字符串。如果我使用
NSUTF8StringEncoding
而不是
data
对象中的数据


我的理解是,如果字符串不能使用指定的字符串编码进行转换,字符串转换方法将返回
nil

我不知道您所说的“不在日志中”是什么意思--该字符串可以放在字典中,也可以记录在日志中。请记住,您看到的内容取决于用于显示的字符集,可能无法真实反映字符串中的内容。要查看字符串中的内容,请使用
characterAtIndex
检查字符的数值,例如:这毫无意义:
NSString*string=[[NSString alloc]init]
NSString是不变的,随后的赋值只是覆盖(和泄漏)您创建的空字符串的地址。@HotLicks我尝试记录原始的NSString和新编码的NSString,我有对所有内容,但当涉及到Citroën时,我只有旧的NSString,而新的NSString只移动到下一批信息。。几乎就像它从未被放入NSString。好吧,在转换之后,我不会感到难以置信的惊讶。由于流中的8位字符作为UTF8无效,因此以ASCII格式写入然后以UTF8格式读取的字符串可能无法正确读入。对。。所以我需要弄清楚之前的编码类型是什么。我只是厌倦了在将NSUTF8放入NSData对象时使用它,但当我将它传递回NSString时,它会输出相同的垃圾。雪铁龙:我想你的ASCII码是错的。我尝试了一个
NSUTF8StringEncoding-NSASCIIStringEncoding
组合,它打印了
“CitroÃën”
,我猜出来了。。显然,当这个字符串被发送给我时,UTF8前缀被省略了。。所以这就是我要解决的问题我需要找出解决方法。。但不是很确定