2

basic_string<wchar_t>从具有 UTF16 编码的 C++ 对象转换为 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看起来它在多字节字符缓冲区上出现问题,在它找到的第一个 NULL 字节处停止。

[更新]

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

于 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 回答