Я пытаюсь конвертировать NSString
в C-String` используя следующий вызов:
NSString* path = ...
const char* str = [path cStringUsingEncoding: NSUTF16StringEncoding];
path
содержит путь к файлу Но я получаю str как просто «/». Когда я использую этот вызов вместо:
const char* str = [path UTF8String];
Возвращенный str
хорошо, то есть я получаю требуемый путь в виде c-строки. Но мне нужно убедиться, что преобразование работает во всех случаях, независимо от кодировки типов, используемой в пути, т. Е. Я хочу позаботиться о символах Юникода. И для этого мне нужно использовать начальный вызов.
Какую ошибку я делаю?
Это из-за выбранной вами кодировки. UTF-16 вернет символы в 16-битном формате, и вы ожидаете 8-битные символы (т. Е. UTF-8).
Так что, если путь начинается с /
, который будет возвращен как 0x2F00
(в предположении, что используется кодирование с прямым порядком байтов) и 00
последовательность будет выглядеть конец строки.
Вы должны попробовать использовать кодировку UTF8, это ‘\’, которое вы получите, будет первым из строки NSString … в c каждый символ занимает 1 байт (8 бит), но UTF16 делает символы длиной 2 байта .. и поэтому возникает ошибка