次のコードを検討してください。
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 エンコーディングであると確信しています。それ -- 異なるファイル エンコーディング -- が、この動作の唯一の可能な説明ですよね?
2番目のケースで何がうまくいかなかったのか、何か考えはありますか? どうすれば修正できますか?
(2 番目のケースでは、コードが.mm
ファイル内、つまり Objective-C++ の下で実行されていることを言及しておく必要があります。これで説明できますか?)