2

UTF16エンコーディングのC++basic_string<wchar_t>オブジェクトからObjective-C NSStringオブジェクトに変換する最良の方法は何ですか?

このように wchar_t* から char* にキャストしても、stringWithCString で文字列を正しく使用できますか?

[NSString stringWithCString:(char*)wideCharBasicString.c_str() encoding:NSUTF16StringEncoding];

ありがとう、シェーン

4

3 に答える 3

1

バッファーが UTF-16 でエンコードされている場合は、次のようにすることができます。

    NSData* data = [[[NSData alloc] initWithBytesNoCopy:buffer
                                                 length:length
                                           freeWhenDone:NO] autorelease];
    NSString* result = [[NSString alloc] initWithData:data
                                             encoding:NSUTF16LittleEndianStringEncoding];

stringWithCStringマルチバイト文字バッファーで barfs を実行しているように見え、最初に見つかった NULL バイトで停止します。

[更新]

Apple にバグを報告しましたが、これは予想される動作です。stringWithCString は 8 ビット エンコーディングのみをサポートし、最初の 0 バイトで停止します。

于 2012-09-14T02:08:36.110 に答える
0

以下を使用して変換を行いました。

NSString *myNSString = [NSString stringWithFormat:@"%S",wideCharBasicString.c_str()]; 

また、誰かが私のようにこれを使用する必要がある場合、フラグ -fshort-wchar は iOS で wchar_t を 16 ビットにします。

于 2011-04-07T23:44:35.573 に答える
-1

これはそれを行うための最も醜い方法です(utf16):

NSString* nsstr = [NSString stringWithCharacters:str.c_str() length:str.length()];
于 2013-10-11T09:43:17.320 に答える