在我的iPhone App中,我可以将数据导出到.txt文件并通过邮件发送-但目前在编码方面存在问题。
要将文件附加到邮件中,我只需从NSString实例创建一个NSData实例,如下所示:
NSData *dataToExport = [[NSData alloc] initWithData:[myExportString dataUsingEncoding:NSUTF8StringEncoding]];
[[NSFileManager defaultManager] createFileAtPath:pathToExportFile contents:dataToExport attributes:nil];
但这最终会导致文件内容如下(编码错误):
√úberraschung
而是使用
[myExportString writeToFile:pathToExportFile atomically:NO encoding:NSUTF8StringEncoding error:&error];
...创建一个带有正确以下内容的文件:
Überraschung
有什么想法,我怎么能用第一种方法获得正确的编码?
谢谢,
弗洛里安
最佳答案
NSString的writeToFile:atomically:encoding:error:
方法在输出文件上设置扩展属性,以标识编码。 TextEdit检查此属性,并在存在时使用该编码。
由于您不(也不能)告诉NSFileManager的方法要使用哪种编码(因为它是针对纯数据的,不一定是文本编码为数据的),因此不会设置此属性。没有它,TextEdit将会猜测,而且效果很差。
我不知道MobileMail是否会以某种方式保留扩展属性。两种方法都可以尝试,当您收到消息时,请检查其原始内容,并查看其中是否指定了文件的编码。无论如何,您的十六进制转储证明了两种方法都可以正确编码文本。
通常,当您要将文本写到文件中时,NSString的方法是正确的解决方案。
关于iphone - 使用writeToFile:atomically:encoding:error:与createFileAtPath:contents:attributes时,不同的编码结果:,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3965599/