请考虑以下守则:
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);
如果从一个全新的基金会项目中运行,该方案的产出如下:
C string comparison: 0
str1: "√§"
str2: "√§"
这正是我所期望的,因为弦应该是一样的。
然而,如果我在另一个代码库的深处 运行这个完全相同的代码, 我得到这个输出:
C string comparison: 31
str1: "√§"
str2: "√§"
我敢肯定两个文件都在 UTF-8 编码中, 不同的文件编码是解释这种行为的唯一可能的解释,对吧?
在第二个案子中,有什么想法会出错?我怎么解决呢?
(也许我应该提到,在第二种情况下,代码是在一个 .mm
文件中运行的,即在目标C++下。这可以解释吗? )