Ошибка преобразования NSString в C-String

Я пытаюсь конвертировать NSString в C-String` используя следующий вызов:

NSString* path = ...
const char* str = [path cStringUsingEncoding: NSUTF16StringEncoding];

path содержит путь к файлу Но я получаю str как просто «/». Когда я использую этот вызов вместо:

const char* str = [path UTF8String];

Возвращенный str хорошо, то есть я получаю требуемый путь в виде c-строки. Но мне нужно убедиться, что преобразование работает во всех случаях, независимо от кодировки типов, используемой в пути, т. Е. Я хочу позаботиться о символах Юникода. И для этого мне нужно использовать начальный вызов.

Какую ошибку я делаю?

1

Решение

Это из-за выбранной вами кодировки. UTF-16 вернет символы в 16-битном формате, и вы ожидаете 8-битные символы (т. Е. UTF-8).

Так что, если путь начинается с /, который будет возвращен как 0x2F00 (в предположении, что используется кодирование с прямым порядком байтов) и 00 последовательность будет выглядеть конец строки.

3

Другие решения

Вы должны попробовать использовать кодировку UTF8, это ‘\’, которое вы получите, будет первым из строки NSString … в c каждый символ занимает 1 байт (8 бит), но UTF16 делает символы длиной 2 байта .. и поэтому возникает ошибка

0

По вопросам рекламы [email protected]