【问题标题】:equivalent of +[NSString stringWithContentsOfURL:usedEncoding:error:] for CFStringRef相当于 CFStringRef 的 +[NSString stringWithContentsOfURL:usedEncoding:error:]
【发布时间】:2012-05-23 07:46:12
【问题描述】:

我想知道什么相当于 +[NSString stringWithContentsOfURL:usedEncoding:error:] 在 CoreFoundation 中?

我知道这次我可以使用 (__bridge NSString *) 的东西,我宁愿让我的生活复杂一点,并了解一下在 Cocoa 出现之前这是如何完成的...... :)

按照我的口味,在objective-c中有几行来做一个东西是很丑的

...
CFErrorRef error = NULL;
CFURLRef fileURL = CFBundleCopyResourceURL(bundle,
                                           CFSTR("file"),
                                           CFSTR("txt"),
                                           NULL);

// Ugly piece of objc code in my whole C source file :(
NSError *nsError = (__bridge NSError *)(error);
NSString *nsString = [NSString stringWithContentsOfURL:(__bridge NSURL *)fileURL
                                          usedEncoding:NULL
                                                 error:&nsError];

CFStringRef fileContents = (__brigde CFStringRef)nsString; 
...

【问题讨论】:

    标签: objective-c c core-foundation


    【解决方案1】:

    你可以试试

    CFStringCreateFromExternalRepresentation
    

    我会想象代码是这样的,

    NSData *data = [NSData dataWithContentsOfFile:<path to your file>]
    CFStringRef string = CFStringCreateFromExternalRepresentation(NULL, (CFDataRef)data, kCFStringEncodingUTF8);
    

    理想情况下要访问错误,您还可以使用 NSData 的 dataWithContentsOfFile:options:error:

    【讨论】:

    • 这几乎是我想要的......虽然-stringWithContentsOfURL:usedEncoding:error:会尝试猜测文件的编码,而在不知道编码的情况下读取文件时我必须将编码传递给CFStringCreateFromExternalRepresentation()很重要:(
    • 可以尝试使用不同的编码设置迭代多个CFStringCreateExternalRepresentation,并将lossByte 指定为0,以便函数在无法使用编码时返回NULL。如果这有帮助,我会编辑我的答案! :)
    猜你喜欢
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多