Как инициализировать NSString строкой UTF-16 (char16_t)? - PullRequest
1 голос
/ 01 августа 2020

У меня есть следующая функция:

long long GetSize() {
    NSString *_filePath = [[NSString alloc] initWithUTF8String:m_filePath];
    return [[[NSFileManager defaultManager]attributesOfItemAtPath:_filePath error:nil] fileSize];
}

Конкретно эта строка NSString *_filePath = [[NSString alloc] initWithUTF8String:m_filePath];. Раньше m_filePath содержал строку UTF-8, но теперь он стал содержать строку UTF-16 char16_t, поэтому initWithUTF8String теперь не подходит.

Есть ли метод, который принимает UTF- 16 строк char16_t?

Ответы [ 2 ]

0 голосов
/ 08 августа 2020

Основываясь на ответе testdrive , я бы посоветовал вам следующее:

[[NSString alloc] initWithCharacters:(const unichar *)m_filePath.c_str() length:m_filePathLength]; // m_filePathLength is the number of characters to use from (const unichar *)m_filePath.c_str()

Итак, если m_filePath объявлен как std::u16string, вы должны преобразовать его в const unichar *.

0 голосов
/ 01 августа 2020
NSString *_filePath = [[NSString alloc] initWithCharacters:m_filePath length:m_filePathLength];

Или вы можете сделать это:

NSString *_filePath = [NSString stringWithFormat:@"%S", m_filePath];

Если ваш m_filePath представляет собой массив 16-битных кодовых единиц UTF-16 с завершающим нулем.

...