2011-03-31 55 views
1

什麼是從帶有UTF16編碼的C++ basic_string<wchar_t>對象轉換爲Objective-C NSString對象的最佳方法?basic_string <wchar_t> UTF16編碼爲NSString

我可以從wchar_t *轉換爲char *就像這樣,仍然有stringWithCString正確使用字符串?

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

謝謝 巴蒂爾

+0

iOS上甲'wchar_t'是32位寬IIRC。 – kennytm 2011-03-31 20:47:54

+0

我剛剛證實它確實是32位的。我將如何去使用UTF32編碼的相同方法? – iEqualShane 2011-03-31 21:25:11

+0

所以NSString * myNSString = [NSString stringWithFormat:@「%S」,wideCharBasicString.c_str()];似乎有竅門。 stringWIthCString只給了我一個空的NSString。 另外,如果有人需要像我這樣使用這個,標誌-fshort-wchar在iOS上將wchar_t變成16位。 – iEqualShane 2011-04-07 23:37:50

回答

0

我用下面做converison:

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

而且如果有人需要使用這個像我一樣,標誌-fshort-WCHAR圈iOS上的wchar_t爲16位。

1

如果緩衝區是UTF-16編碼,你可以這樣做:

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

stringWithCString看起來barfs多字節字符緩衝區,它找到的第一個空字節停止。

[UPDATE]

我申請一個bug與蘋果,這是預期的行爲,顯然。 stringWithCString只支持8位編碼,並將停止在第一個零字節。

+0

好吧,它是舊的,但我是在相同的情況下:我確認stringWithCString將無法與UTF16 IOS 5.1 – gogoprog 2013-06-07 13:17:49

-1

這是最不難看的方式來做到這一點(UTF-16):

NSString* nsstr = [NSString stringWithCharacters:str.c_str() length:str.length()];