basic_string <wchar_t> UTF16编码为NSString </wchar_t>

时间:2011-03-31 20:35:25

标签: iphone objective-c encoding nsstring wchar-t

将具有UTF16编码的C ++ basic_string<wchar_t>对象转换为Objective-C NSString对象的最佳方法是什么?

我可以像这样从wchar_t *转换为char *并仍然使用stringWithCString正确使用该字符串吗?

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

谢谢你, 沙恩

3 个答案:

答案 0 :(得分: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字节处。

[<强>更新

我向苹果提交了一个错误,这是预期的行为,显然是。 stringWithCString仅支持8位编码,并将在第一个零字节处停止。

答案 1 :(得分:0)

我使用以下方法进行转换:

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

此外,如果有人像我一样需要使用它,那么标志-fshort-wchar会在iOS上将wchar_t转换为16位。

答案 2 :(得分:-1)

这是最难看的方式(utf16):

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