将NSString转换为C-String时出错

时间:2013-10-31 13:31:58

标签: c++ objective-c unicode nsstring unicode-string

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

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

path包含文件路径。但是,我得到str只是“/”。当我改用这个电话时:

const char* str = [path UTF8String];

返回的str很好,即我将所需的路径作为c-string。但是,我需要确保转换在所有情况下都能正常工作,而不管路径中使用的类型编码,即我想要处理unicode字符。为此,我需要使用初始调用。

我犯了什么错误?

2 个答案:

答案 0 :(得分:3)

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

因此,如果路径以/开头,则会返回0x2F00(假设采用小端编码),00序列将显示字符串结尾

答案 1 :(得分:0)

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