basic_string<wchar_t>
从具有 UTF16 编码的 C++ 对象转换为 Objective-C NSString 对象的最佳方法是什么?
我可以像这样从 wchar_t* 转换为 char* 并且仍然让 stringWithCString 正确使用字符串吗?
[NSString stringWithCString:(char*)wideCharBasicString.c_str() encoding:NSUTF16StringEncoding];
谢谢你,谢恩
basic_string<wchar_t>
从具有 UTF16 编码的 C++ 对象转换为 Objective-C NSString 对象的最佳方法是什么?
我可以像这样从 wchar_t* 转换为 char* 并且仍然让 stringWithCString 正确使用字符串吗?
[NSString stringWithCString:(char*)wideCharBasicString.c_str() encoding:NSUTF16StringEncoding];
谢谢你,谢恩
如果缓冲区是 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 位编码,并将在第一个零字节处停止。
我使用以下内容进行转换:
NSString *myNSString = [NSString stringWithFormat:@"%S",wideCharBasicString.c_str()];
此外,如果有人需要像我一样使用它,标志 -fshort-wchar 在 iOS 上将 wchar_t 转换为 16 位。
这是最不难看的方法(utf16):
NSString* nsstr = [NSString stringWithCharacters:str.c_str() length:str.length()];