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

ここで重要なのは、「use d Encoding」の「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 に答える