【发布时间】:2013-03-12 14:17:31
【问题描述】:
我需要在 Mac Os X 中解析最近文件的默认数据库。这是通过 sed 完成的。需要注意的是,文件名存储在里面的分解的 utf-16 中。
所以,我想,(在被指向 NSString 函数之后)“我为什么不做一个小工具来处理它”。
该工具应该基本上像 cat 一样工作,它从输入中获取行,它将每一行转换为 CFStringref 对象,在 CFStringref 希望 被转换为预先组合的 UTF-16 之前,我将其转换为返回 UTF-8,并打印出来。
我不想这么说,但我不知道这种“免费桥接”是否有效,我无意为此使用 Cocoa 和 Objective C,我只是想要一个使用 CFStringref 的直接解决方案,也就是说,如果存在这样的解决方案!
谢谢!
这是我目前得到的:
#define BUFFERSIZE 512
static void
precomposedOutput( char *fn )
{
char buffer[BUFFERSIZE] ;
CFStringRef str ;
char *outbuf;
char *bytes ;
FILE *fd = stdin ;
if (fn) {
fd = fopen(fn,"r");
}
while ( fgets(buffer, sizeof(buffer),fd ) ) {
bytes = savestr(buffer) ;
str = CFStringCreateWithCStringNoCopy(NULL, bytes,kCFStringEncodingUTF8, NULL);
/* CONVERSION INTO PRECOMPOSED IS SUPPOSED TO HAPPEN HERE */
outbuf = Copy_CFStringRefToCString(str) ;
CFRelease(str) ;
fputs(outbuf,stdout) ;
free(outbuf) ;
}
}
到目前为止,这似乎在来回转换方面有效(不要在其上运行 leaks。) 我需要帮助的是将 CFString 转换为预先组合的 UTF-16。
谢谢!
【问题讨论】:
标签: c macos cocoa nsstring cfstring