1

この方法で、URLコンテンツから文字列を取得しています。

NSString *urlStr = [NSString stringWithFormat:@"http://www.example.com/string_to_retrieve"];
NSURL *url = [NSURL URLWithString:urlStr];
NSString *resp = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:nil];

このようにファイルに書き込みます。

NSString *outFile = @"/path/to/myfile";
[resp writeToFile:outFile atomically:YES encoding:NSUTF8StringEncoding error:nil];

私の文字列には「F6」の16進値で表される「ö」のようないくつかの特別な文字が含まれていますが、16進エディタで文字列が書き込まれているファイルを開こうとすると、「ö」(F6)が変換されたことがわかります他の2つの文字へ: "ö"(C3 B6)

両方で他のいくつかの文字列エンコーディングを試しました

NSString *resp = [NSString stringWithContentsOfURL:url encoding:NSASCIIStringEncoding error:nil];

[resp writeToFile:outFile atomically:YES encoding:NSUTF8StringEncoding error:nil];

しかし、常に悪い結果をもたらします...

NSASCIIStringEncoding私が自分のURLからその文字列を取得できる唯一の方法のようです:私が取得するNSUTF8StringEncodingすべてのような他のエンコーディングを使用する場合はnil

NSUTF8StringEncoding私が自分のファイルに書き込むことができる唯一の方法のようです:NSASCIIStringEncoding私が得るすべてのような他のエンコーディングを使用する場合、0バイトのファイルです

では、どうすればその文字列を適切に取得してファイルに書き込むことができますか?

4

1 に答える 1

7

F6は の「ö」の文字コードなNSISOLatin1StringEncodingので、

[resp writeToFile:outFile atomically:YES encoding:NSISOLatin1StringEncoding error:nil];

望ましい結果が得られるはずです。(NSISOLatin2StringEncoding同様に機能します。違いについてはわかりません。サポートされているエンコーディングのドキュメントはあまり詳細ではありません。)


アップデート:

  • NSISOLatin1StringEncodingISO-8859-1エンコーディングで、「西ヨーロッパ」言語を対象としています。
  • NSISOLatin2StringEncodingISO-8859-2エンコーディングで、「東ヨーロッパ」言語を対象としています。
  • @Esailija は、 Windows-1252がより適切な選択である可能性があると述べています (以下のコメントを参照) 。対応するエンコーディングはNSWindowsCP1252StringEncodingです。
于 2012-12-18T09:21:48.490 に答える