0

これが私のコードです。

std::wstring sourceString = L"test\n newline.";
NSString* transformedString = [NSString stringWithFormat:@"%S", sourceString.c_str()];

2つの文字列の内容を同じにするつもりでしたが、transformedStringは@"t"と同等です。最小限の編集でこれを修正するにはどうすればよいですか?

(Unicodeの問題のため、wstringを使用する必要があります。)

4

1 に答える 1

1

Mac OS X / iOSでは、wchar_t32ビット幅(つまり、UTF-16文字ではなくUTF-32文字を表します)%Sはnullで終了unicharする配列に対応し、 unichar32ビット幅ではなく16ビット幅であるため、文字't'が表示されます。NSString末尾のnull文字(またはBig Endianターゲットの先頭のnull文字)を使用して、文字列を切り捨てます。

に変換するには、次のことNSStringを試してください。

NSString * transformedString = [[NSString alloc]
    initWithBytes: sourceString.c_str()
    length:        sourceString.size() * sizeof(wchar_t)
    encoding:      NSUTF32StringEncoding];

上記は、wchar_tがUTF-32値を保持していることを前提としていることに注意してください。これは、Mac OS Xおよびほとんど(すべて?)の* NIXで真ですが、Windowsでは偽です(wchar_t16ビットは。に相当しunicharます)。

于 2011-06-03T18:22:12.480 に答える