1

我正在尝试NSString使用以下调用转换为 C-String`:

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

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

const char* str = [path UTF8String];

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

我犯了什么错误?

4

2 回答 2

3

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

因此,如果路径以 开头/,则将返回为0x2F00(假设 little-endian 编码),并且该00序列将看起来是 string 的结尾

于 2013-10-31T13:34:58.803 回答
0

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

于 2013-10-31T13:39:42.583 回答