为什么服务器请求的文件名以Unicode字符开头?

时间:2012-05-14 02:31:32

标签: iphone objective-c unicode ftp

我使用FTP列出服务器上的文件属性。我请求文件的名称并将它们放入一个数组中。我直接打印数组:

NSLog(@"%@", array); 

我得到的是这样的:

\U6587\U4ef6\U540d\Uff1afilename.txt
\U6587\U4ef6\U540d\Uff1afilename1.txt
......

当我想要打印Unicode“\ U6587 \ U4ef6 \ U540d \ Uff1a”以查看它是什么时,我收到了编译错误:“不完整的通用字符名称”。

但是,如果我打印名称而不是整个数组,我可以在没有Unicode的情况下正确获取名称。但我需要对数组中的名称做一些事情。我想知道为什么Unicode存在,并且删除Unicode然后用真实文件名做某事是否合适?

2 个答案:

答案 0 :(得分:4)

在C99中,因此也可能是Objective C,有两个Unicode转义:

\uXXXX
\UXXXXXXXX

小写u后跟4个十六进制数字;大写U后面跟着8个十六进制数字(其中,前两个应该是零有效的Unicode(第三个应该是0或1;最大的Unicode代码点是U + 10FFFF)。

我相信如果用小写的U替换大写的u,你应该得到要编译的代码。

在我的Mac OS 10.7.4系统上,使用GCC 4.7.0(自制)编译,我编译了这段代码:

#include <stdio.h>

int main(void)
{
    char array[] = "\u6587\u4ef6\u540d\uff1a";
    puts(array);
    return 0;
}

得到了这个输出:

  • 文件名:

我无法回答为什么字符存在,但最后的冒号字符表明该网站可能在实际文件名前面加上某种标记(类似于'file:')。 / p>

答案 1 :(得分:0)

除了Jonathan所说的内容之外,您可能必须使用stringWithUTF8String:,但我同意错误是使用大写U而不是u