basic_string <wchar_t> кодировка UTF16 в NSString - PullRequest
2 голосов
/ 01 апреля 2011

Каков наилучший способ преобразования объекта C ++ basic_string<wchar_t> с кодировкой UTF16 в объект NSString Objective-C?

Могу ли я привести значение из wchar_t * в char *, как в таком случае, и при этом все еще использовать stringWithCString, чтобы правильно использовать строку?

[NSString stringWithCString:(char*)wideCharBasicString.c_str() encoding:NSUTF16StringEncoding];

Спасибо, Шейн

Ответы [ 3 ]

1 голос
/ 14 сентября 2012

Если буфер имеет кодировку UTF-16, вы можете сделать это:

    NSData* data = [[[NSData alloc] initWithBytesNoCopy:buffer
                                                 length:length
                                           freeWhenDone:NO] autorelease];
    NSString* result = [[NSString alloc] initWithData:data
                                             encoding:NSUTF16LittleEndianStringEncoding];

stringWithCString выглядит так, как будто это barfs в многобайтовых символьных буферах, останавливаясь на первом найденном NULL-байте.

[ UPDATE ]

Я подал ошибку с яблоком, и это ожидаемое поведение, очевидно . stringWithCString поддерживает только 8-битные кодировки и останавливается на первом нулевом байте.

0 голосов
/ 11 октября 2013

Это наименее уродливый способ сделать это (utf16):

NSString* nsstr = [NSString stringWithCharacters:str.c_str() length:str.length()];
0 голосов
/ 08 апреля 2011

Для преобразования я использовал следующее:

NSString *myNSString = [NSString stringWithFormat:@"%S",wideCharBasicString.c_str()]; 

Также, если кому-то нужно использовать это, как я, флаг -fshort-wchar превращает wchar_t в 16-битный на iOS.

...