将具有UTF16编码的C ++ basic_string<wchar_t>
对象转换为Objective-C NSString对象的最佳方法是什么?
我可以像这样从wchar_t *转换为char *并仍然使用stringWithCString正确使用该字符串吗?
[NSString stringWithCString:(char*)wideCharBasicString.c_str() encoding:NSUTF16StringEncoding];
谢谢你, 沙恩
答案 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()];