关于iphone:basic_string UTF16编码为NSString

basic_string UTF16 encoding to NSString

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

我可以像这样从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看起来像在多字节字符缓冲区上倒转,在找到的第一个NULL字节处停止。

[更新]

我向苹果提交了一个错误,显然这是预期的行为。 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()];