0

我正在阅读一个用 UTF8 编码的 txt 文件。

我现在正在阅读文件。我有这行:

- (NSString *) readFromFile {

    NSArray *paths = NSSearchPathForDirectoriesInDomains
    (NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];


    NSString *fileName = [NSString stringWithFormat:@"%@/textfile.txt",
                          documentsDirectory];
    return [[NSString alloc] initWithContentsOfFile:fileName
                        usedEncoding:NSUTF8StringEncoding
                        error:nil];
}

我在最后一行有这个错误:

不兼容的整数到指针转换将 int 发送到 NSUTF8StringEncoding 类型的参数 *

为什么?

4

3 回答 3

5

这里的关键是“使用d编码”中的“d”。

该参数用于将有关用于读取文件的编码的信息传递回调用者。

这意味着它是NSString通知调用者它用于从文件中的原始数据创建对象的编码的类 - 而不是可以指示类使用哪种编码的调用者。

要获取此信息,您需要声明一个变量并传递对它的引用,以便NSString类对象可以将信息放入其中,以便您稍后在需要信息时阅读。

NSStringEncoding enc;

NSString *result = [[NSString alloc] initWithContentsOfFile:fileName
                    usedEncoding: &enc
                    error:nil];

// Do something with the information about the encoding used
if ( enc == NSUTF8StringEncoding ) {
     // ...
}

return result;
于 2013-04-01T19:28:35.583 回答
1

采用:
initWithContentsOfFile:encoding:error:

于 2013-04-01T19:29:28.920 回答
1
initWithContentsOfFile:usedEncoding:error:
Returns an NSString object initialized by reading data from the file at a given path and returns by reference the encoding used to interpret the characters.

- (id)initWithContentsOfFile:(NSString *)path usedEncoding:(NSStringEncoding *)enc error:(NSError **)error
Parameters
path
A path to a file.
enc
Upon return, if the file is read successfully, contains the encoding used to interpret the file at path.
error
If an error occurs, upon returns contains an NSError object that describes the problem. If you are not interested in possible errors, pass in NULL.

这是来自文档:-)

所以基本上,就像@Monolo 所说的那样,这是用来向您返回编码类型而不是设置它。如果你想设置它,你必须使用: - (id)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error

于 2013-04-01T19:31:29.203 回答