0

CSVを使用して CoreData からファイルを作成していますCHCSVWriterが、これまでのところ、ファイルは完全に作成されています。私の問題は、私CSVが作成したファイルを送信しようとしているときに、いくつかの問題で実行されていることCSVです.Excelでファイルを開くと、ヘブライ語のテキストの代わりに意味不明なものが表示されます.

NSLog文字列の結果を出力するために使用している間CSV、ヘブライ語がうまく表示されます。との間で変換した後でNSStringNSData

これは私が得るものです: יוסי צפר

これは私のコードです:

- (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 のようです。受信した CSV ファイルを TextEdit で開くと、問題なく表示されます。

ここに画像の説明を入力 ここに画像の説明を入力

于 2013-10-08T08:57:10.783 に答える
1

私の解決策は、CSV ファイルを開いて UTF-8 エンコーディングを保存しようとするときに Excel のバグを解決するために、開始時に BOM 文字を追加することです。

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 を明示的な charset パラメータとともに使用します。たとえば、

text/plain; charset=utf-8

csv 文字列NSDataをそのエンコーディングを使用して明示的にエンコードします (例: NSUTF8StringEncoding)。

編集:

実はMIMEタイプがありますtext/csv

したがって、次のものも使用できます。 text/csv; charset=utf-8

于 2013-10-08T09:00:53.230 に答える