【问题标题】:How to change NSString encoding如何更改 NSString 编码
【发布时间】:2012-10-24 01:32:43
【问题描述】:

我有一个像这样的 NSString。

雪铁龙ën

这是 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 的一个字符串。它只是从日志中遗漏了。

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

【问题讨论】:

  • 我不知道您所说的“不在日志中”是什么意思——该字符串可以放在字典中并像其他任何内容一样记录。
  • 请记住,您看到的内容取决于用于显示的字符集,可能无法真正反映字符串中的内容。要查看字符串中的内容,请检查带有 characterAtIndex 的字符的数值,例如。
  • 这毫无意义:NSString *string = [[NSString alloc] init]; NSString 是不变的,随后的赋值只会覆盖(并泄漏)您创建的空字符串的地址。
  • @HotLicks 我尝试同时记录原始 NSString 和新编码的 NSString 并且我有成对的所有东西,但是当涉及到 Citroën 我只有旧的 NSString 而新的 NSString 只是移动到下很多信息.. 几乎就像它从未放入 NSString 中一样。
  • 嗯,经过这种转变,我不会感到非常惊讶。由于流中的 8 位字符作为 UTF8 无效,因此写入为 ASCII 然后读取为 UTF8 的字符串可能无法正确读取。

标签: ios encoding nsstring nsdata


【解决方案1】:

我刚刚尝试了您的示例,问题出在以下行:

NSData *data = [string dataUsingEncoding:NSASCIIStringEncoding];

如果我 NSLog data 的内容我得到 nil 返回。这大概意味着“Citroën”不是一个有效的 ASCII 字符串开头。如果我改用NSUTF8StringEncoding,我会在data 对象中获取数据。

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

【讨论】:

  • 对..所以我需要弄清楚以前的编码类型是什么。
  • 当我将 NSUTF8 放入 NSData 对象时,我只是厌倦了使用它,但是当我将它传递回 NSString 时,它会输出相同的废话。 雪铁龙
  • 我认为您的 ASCII 已关闭。我尝试了NSUTF8StringEncoding - NSASCIIStringEncoding 组合,它打印了"CitroÃÆÃ«n"
  • 我想通了.. 显然,当这个字符串被发送给我时,UTF8 前缀被忽略了.. 所以这就是我正在处理的我需要弄清楚如何修复.. 但不是真的很确定atm
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
相关资源
最近更新 更多