在我的iPhone应用程序中,我可以将数据导出到.txt文件并通过Mail发送 - 但目前在编码方面存在问题。
要将文件附加到邮件,我只需从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];
...使用正确的enconding创建一个文件:
Überraschung
任何想法,我如何能够以第一种方式获得正确的编码?
谢谢你, 弗洛里安
答案 0 :(得分:1)
NSString的writeToFile:atomically:encoding:error:
方法在输出文件上设置标识编码的扩展属性。 TextEdit检查此属性并在其存在时使用该编码。
由于您没有(并且不能)告诉NSFileManager的方法使用什么编码(因为它是用于普通数据,不一定是文本编码为数据),因此它不会设置此属性。如果没有它,TextEdit会猜测,而且它的确如此糟糕。
我不知道MobileMail是否会以某种方式保留扩展属性。尝试两种方式,当您收到消息时,检查其原始内容并查看其中一个是否指定了文件的编码。无论如何,你的十六进制转储证明文本正确编码。
更一般地说,当您想要将文本写入文件时,NSString的方法是正确的解决方案。
答案 1 :(得分:0)
这很奇怪。这是hexdump -C输出。
“错误”编码:
00000000 c3 9c 62 65 72 72 61 73 63 68 75 6e 67 |..berraschung|
0000000d
“正确”编码:
00000000 c3 9c 62 65 72 72 61 73 63 68 75 6e 67 |..berraschung|
0000000d
我也在尝试不同的应用程序来查看文档:
非常奇怪,对吧?