将 NSString 转换为 C 字符串时出错

Error converting NSString to C-String

本文关键字:字符串 出错 NSString 转换      更新时间:2023-10-16

我正在尝试使用以下调用将NSString转换为 C 字符串":

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

path包含文件路径。但是,我得到的str只是"/"。当我改用此调用时:

const char* str = [path UTF8String];

返回的str很好,即我得到所需的路径作为 c 字符串。但是,我需要确保转换在所有情况下都有效,无论路径中使用的类型编码如何,即我想处理 unicode 字符。为此,我需要使用初始调用。

我犯了什么错误?

这是因为您选择的编码。 UTF-16 将返回 16 位字符,而您期望 8 位字符(即 UTF-8)。

因此,如果路径以 / 开头,则将返回为 0x2F00(假设小端编码),并且00序列将看起来是字符串的结尾

你应该尝试使用 UTF8 编码,你得到的这个"\"将是 NSString 的第一个......在 c 中,每个字符占用 1 个字节(8 位),但 UTF16 使字符长度为 2 个字节。所以发生了错误