iphone - 使用 writeToFile :atomically:encoding:error: vs. createFileAtPath:contents:attributes: 时的不同编码结果:

标签 iphone objective-c cocoa encoding

在我的 iPhone 应用程序中,我能够将数据导出到 .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: vs. createFileAtPath:contents:attributes: 时的不同编码结果:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3965599/

相关文章:

javascript - 有没有数学。当我调用它时给出数字序列的函数?

ios - Objective C中几个不同 View Controller 之间通信的正确方法

iphone - 将间接指针转换为 Objective-C 指针

objective-c - 如何在核心数据关系实际发生变化之前观察它?

objective-c - 以编程方式使 Cocoa 按钮看起来像被按下

ios - 无法创建新的客户端 ID(适用于 iOS SDK 中的 google plus 登录)

iPhone + 共享点

iphone - 无法呈现 modalViewController

objective-c - Google 云端硬盘上传 API 错误

macos - 如何为 NSCollectionView 的 "Overshoot"背景着色