0

我正在CSV使用 CoreData 创建一个文件,CHCSVWriter到目前为止一切顺利,并且文件正在完美创建。我的问题是当我尝试发送CSV我创建的文件时,我正在运行一些问题,我CSV用 Excel 打开文件,而不是希伯来文文本,我看到的是乱码。

在使用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;
    }
}

有人可以告诉我我做错了什么吗?

提前致谢。

4

3 回答 3

3

您看到乱码是因为您将 Unicode 转换为 ASCII。[csvFileString dataUsingEncoding:[NSString defaultCStringEncoding]]应该是[csvFileString dataUsingEncoding:NSUTF8StringEncoding]

另外,mimeType:@"text/cvs"应该是mimeType:@"text/csv"

编辑:问题似乎是 Excel。在 TextEdit 中打开收到的 CSV 文件显示得很好。

在此处输入图像描述 在此处输入图像描述

于 2013-10-08T08:57:10.783 回答
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"];
于 2014-09-25T08:42:25.343 回答
0

我怀疑,有一个编码问题。您正在发送具有无效 MIME 类型的生成文件:text/cvs

我会使用带有显式字符集参数的 text/plain,例如

text/plain; charset=utf-8

NSData并使用该编码(例如)将 csv 字符串显式编码为一个NSUTF8StringEncoding

编辑:

实际上,有一种 MIME 类型text/csv

因此,您还可以使用: text/csv; charset=utf-8

于 2013-10-08T09:00:53.230 回答