Search code examples
iosobjective-cnsstringnsdataexport-to-csv

CSV to NSString to NSData with Hebrew text issue


I'm creating a CSV file from CoreData using CHCSVWriter, so far so good and the file is creating perfectly. My problem is when i'm trying to send the CSV file that i've created i'm running in some issues, I open the CSV file with Excel and instead of Hebrew text I see gibberish.

While using NSLog to print the result of the CSV string, I see the Hebrew just fine. Even after converting it from NSString to NSData and back again.

This is what I get: יוסי צפר

This is my code:

- (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;
    }
}

Can someone please tell me what am I doing wrong?

Thanks in advance.


Solution

  • You're seeing gibberish because you're converting Unicode to ASCII. [csvFileString dataUsingEncoding:[NSString defaultCStringEncoding]] should be [csvFileString dataUsingEncoding:NSUTF8StringEncoding].

    Also, mimeType:@"text/cvs" should be mimeType:@"text/csv".

    EDIT: The issue seems to be Excel. Opening the received CSV file in TextEdit displays just fine.

    enter image description here enter image description here