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”十六进制值表示,但是当我尝试使用十六进制编辑器打开写入我的字符串的文件时,我看到“ö”(F6)已转换到另外两个字符:“ö”(C3 B6)

我在两者中都尝试了其他几种字符串编码

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

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

但总是有不好的结果...

NSASCIIStringEncoding似乎是我可以从我的网址中获取该字符串的唯一方法:如果我使用其他编码,就像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 回答