basic_string UTF16 encoding to NSString
从具有UTF16编码的C ++
我可以像这样从wchar_t *转换为char *并仍然让stringWithCString正确使用字符串吗?
1 | [NSString stringWithCString:(char*)wideCharBasicString.c_str() encoding:NSUTF16StringEncoding]; |
谢谢,
谢恩
如果缓冲区是UTF-16编码的,则可以执行以下操作:
1 2 3 4 5 | NSData* data = [[[NSData alloc] initWithBytesNoCopy:buffer length:length freeWhenDone:NO] autorelease]; NSString* result = [[NSString alloc] initWithData:data encoding:NSUTF16LittleEndianStringEncoding]; |
[更新]
我向苹果提交了一个错误,显然这是预期的行为。 stringWithCString仅支持8位编码,并将在第一个零字节处停止。
我使用以下方法来进行收敛:
1 | NSString *myNSString = [NSString stringWithFormat:@"%S",wideCharBasicString.c_str()]; |
另外,如果有人需要像我一样使用它,则标志-fshort-wchar在iOS上会将wchar_t更改为16位。
这是最难看的方法(utf16):
1 | NSString* nsstr = [NSString stringWithCharacters:str.c_str() length:str.length()]; |