我正在使用CSV
从CoreData创建一个CHCSVWriter
文件,到目前为止一直很好,文件创建完美。我的问题是,当我尝试发送我创建的CSV
文件时,我正在运行某些问题,我用Excel打开CSV
文件,而不是希伯来文,我看到了胡言乱语。
使用NSLog
打印CSV
字符串的结果时,我看到希伯来语就好了。即使将其从NSString
转换为NSData
再转回。
这就是我得到的:
יוסי צפר
这是我的代码:
- (void)createCSV
{
CHCSVWriter *writer = [[CHCSVWriter alloc] initForWritingToCSVFile:[self csvFilePath]];
for (EWDBUsers *user in self.users)
{
[writer writeField:user.name];
[writer writeField:user.company];
[writer writeField:user.email];
[writer writeField:user.telephone];
[writer finishLine];
}
[writer closeStream];
}
- (NSString*)csvFilePath
{
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *filename = @"users.csv";
return [documentsDirectory stringByAppendingPathComponent:filename];
}
- (void)showMailComposerController
{
if ([MFMailComposeViewController canSendMail]) {
MFMailComposeViewController* controller = [[MFMailComposeViewController alloc] init];
controller.mailComposeDelegate = self;
[controller setSubject:@"Users List"];
[controller setMessageBody:@"Attachment." isHTML:NO];
NSError *error;
NSString *csvFileString = [NSString stringWithContentsOfFile:[self csvFilePath] encoding:NSUTF8StringEncoding error:&error];
NSLog(@"%@", csvFileString);
NSData *csv = [csvFileString dataUsingEncoding:[NSString defaultCStringEncoding]];
[controller addAttachmentData:csv mimeType:@"text/cvs" fileName:@"users.csv"];
if (controller) {
[self presentModalViewController:controller animated:YES];
}
} else {
return;
}
}
有人可以告诉我我做错了什么吗?
提前致谢。
答案 0 :(得分:3)
你看到的是乱码,因为你正在将Unicode转换为ASCII。 [csvFileString dataUsingEncoding:[NSString defaultCStringEncoding]]
应为[csvFileString dataUsingEncoding:NSUTF8StringEncoding]
。
此外,mimeType:@"text/cvs"
应为mimeType:@"text/csv"
。
编辑:问题似乎是Excel。在TextEdit中打开收到的CSV文件就可以了。
答案 1 :(得分:1)
我的解决方案是在尝试打开CSV文件并保存UTF-8编码时,在开始时添加BOM表以解决Excel中的错误。
cvsStringFile = [[NSString alloc] initWithFormat:@"\357\273\277%@", cvsStringFile];
NSData *myXLSData = [cvsStringFile dataUsingEncoding:NSUTF8StringEncoding];
[picker addAttachmentData:myXLSData mimeType:@"text/csv;charset=utf-8" fileName:@"Report.csv"];
答案 2 :(得分:0)
我怀疑,存在编码问题。您发送的文件的MIME类型无效:text/cvs
。
我会使用带有显式字符集参数的text / plain,例如
text/plain; charset=utf-8
并使用该编码将csv字符串显式编码为NSData
(例如NSUTF8StringEncoding
)。
实际上,有一种MIME类型text/csv
因此,您也可以使用:text/csv; charset=utf-8