假如给定一串乱码Âà†Èô§Â§±Ë¥•,已知它的实际内容为 4 个汉字,你能这些乱码恢复出真实的汉字出来吗?
我使用几个提供乱码文字恢复服务的网站,都没能把它恢复出来。
其实这段乱码是这样产生的:见下面的代码,对于指定汉字字符串,先转换为 c 字符串,再使用 initWithCString 转换为 NSString ,得到的结果为Âà†Èô§Â§±Ë¥•,length 是 12 ,但是字节数为 26
NSString* plain = @"删除失败";
const char *s = [plain UTF8String];
NSString* s1 = [[NSString alloc] initWithCString:s];
正确的做法当然是这样的
NSString* s2 = [[NSString alloc] initWithCString:s encoding:NSUTF8StringEncoding];
initWithCString: 是已被苹果废弃的 api ,我仍然好奇这段乱码是怎么产生的,查看文档没搞清楚它到底用的什么编码导致了这样的乱码。
4 个汉字的 utf8 字符串对应 12 个字节,乱码中的奇怪字符刚好有 12 个,好像是 1 个 utf8 字节对应一个乱码字符?有人能解惑吗
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.