iphone上从url到utf8再到const char的斯堪的纳维亚字母的字符串编码

iphone上从url到utf8再到const char的斯堪的纳维亚字母的字符串编码,iphone,objective-c,encoding,Iphone,Objective C,Encoding,这将记录以下内容: “a%C3%B8 b” “aøb” ”“是的√∏ b' 问题是,我希望碳是‘aøb’。对于如何实现这一目标的任何帮助,我们将不胜感激。摘自《字符串编程指南》: %s:以空结尾的8位数组 无符号字符:%s解释它的 在系统中输入编码,而不是 例如,UTF-8 因此,NSLog(@“%s”,theChar)创建并显示编码错误的NSString对象,并且该CHAR本身包含正确的字符串数据 NSString *theString = @"a %C3%B8 b"; NSLog(@"%@

这将记录以下内容:

“a%C3%B8 b”

“aøb”

”“是的√∏ b'

问题是,我希望碳是‘aøb’。对于如何实现这一目标的任何帮助,我们将不胜感激。

摘自《字符串编程指南》:

%s:以空结尾的8位数组 无符号字符:%s解释它的 在系统中输入编码,而不是 例如,UTF-8

因此,
NSLog(@“%s”,theChar)
创建并显示编码错误的NSString对象,并且该CHAR本身包含正确的字符串数据

NSString *theString = @"a %C3%B8 b";

NSLog(@"%@", theString);

NSString *utf8string = [theString stringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding]

NSLog(@"%@", utf8string);

const char *theChar = [utf8string UTF8String];

NSLog(@"%s", theChar);

提供正确的输出。(aøb)

我认为你做不到。char是一种八位类型,因此所有值都在0-255之间。在UTF8中,ø不在该范围内编码


您可能想看看unicode类型,它是一种16位类型。这可以将ø作为一项保存,并使用getCharacters:range:从NSString中提取字符

我想补充一点,您的
字符
确实包含所需字符串的UTF8字节序列。
NSLog(“%s”)
的问题在于它无法在日志文件和/或控制台中正确显示字符串


因此,如果您想将
char*
中的UTF8字节序列传递给其他库,您所做的是完全正确的。

感谢Vladimir和Mark。你的信息正在澄清。
NSLog([NSString stringWithUTF8String:theChar]);