-->

一些字符在NSString的改变(Some chars changed in NSString)

2019-10-17 12:37发布

我从检索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”十六进制值来表示,但是当我尝试用十六进制编辑器打开在我的字符串写入文件,我看到“O”(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字节的文件

那么,怎样才能正确我检索和编写该字符串我的档案?

Answer 1:

F6是“○”的字符代码NSISOLatin1StringEncoding ,所以

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

应该给予期望的结果。 ( NSISOLatin2StringEncoding工作为好。我不知道的差异。支持的编码的文件是不是很详细。)


更新:

  • NSISOLatin1StringEncoding是ISO-8859-1编码,其意在“西欧”语言。
  • NSISOLatin2StringEncoding是ISO-8859-2编码,其意在“东欧”的语言。
  • @Esailija状态(见下面的评论)是Windows的1252可能是一个更好的选择,相应的编码是NSWindowsCP1252StringEncoding。


文章来源: Some chars changed in NSString