请考虑以下代码:
NSString *string = @"ä";
const char *str1 = [string cStringUsingEncoding:NSUTF8StringEncoding];
const char *str2 = "ä";
NSLog(@"C string comparison: %d",strcmp(str1,str2));
NSLog(@"str1: \"%s\"", str1);
NSLog(@"str2: \"%s\"", str2);
如果从一个全新的 Foundation 项目运行,该程序会输出:
C string comparison: 0
str1: "ä"
str2: "ä"
这确实是我期望发生的,因为字符串应该是相同的。
但是,如果我在另一个代码库的某个深处运行完全相同的代码,我会得到以下输出:
C string comparison: 31
str1: "ä"
str2: "ä"
什么可以解释这种差异?我很确定这两个文件都采用 UTF-8 编码。那——不同的文件编码——是这种行为的唯一可能解释,对吧?
任何想法在第二种情况下可能出了什么问题?我该如何解决?
(我可能应该提一下,在第二种情况下,代码在.mm
文件中运行,即在 Objective-C++ 下。这可以解释吗?)