2

問題文

多数の文字列を作成し、それらを連結して CSV 形式にし、その文字列を添付ファイルとして電子メールで送信します。

これらの文字列に ASCII 文字のみが含まれている場合、CSV ファイルは正しく作成され、電子メールで送信されます。非 ASCII 文字を含めると、結果の文字列が不正な形式になり、CSV ファイルが正しく作成されません。(メール ビューには添付ファイルが表示されますが、送信されません。)

たとえば、これは機能します:

uncle bill's house of pancakes

しかし、これはそうではありません (中括弧に注意してください):

uncle bill’s house of pancakes

質問

すべての有効な Unicode 文字が含まれ、結果の文字列が適切に形成されるように、最終的な文字列を適切に作成してエンコードするにはどうすればよいですか?

ノート

  • 文字列は UITextField を介して作成され、コア データ ストアに書き込まれ、読み取られます。

  • これは、問題が文字列の最初の作成とエンコードにあることを示唆しています: NSString unicode encoding problem

  • これを行う必要はありません: object-c の NSString から非 ASCII 文字を削除します

  • 文字列は、データストアとの間で正常に書き込まれ、読み取られます。文字列は、アプリのテーブル ビューで適切に (個別に) 表示されます。この問題は、電子メールの添付ファイルの文字列を連結する場合にのみ発生します。

文字列処理コード

次のように文字列を連結します。

[reportString appendFormat:@"%@,", category];
[reportString appendFormat:@"%@,", client];
[reportString appendFormat:@"%@\n", detail];
etc.

カーリー引用符を退屈な引用符に置き換えるとうまくいきますが、私はこのようにしたくありません:

- (NSMutableString *)cleanString:(NSString *)activity {
    NSString *temp1 = [activity stringByReplacingOccurrencesOfString:@"’" withString:@"'"];
    NSString *temp2 = [temp1 stringByReplacingOccurrencesOfString:@"‘" withString:@"'"];
    NSString *temp3 = [temp2 stringByReplacingOccurrencesOfString:@"”" withString:@"\""];
    NSString *temp4 = [temp3 stringByReplacingOccurrencesOfString:@"“" withString:@"\""];
    return [NSMutableString temp4];
}

編集: メールが送信されます:

    NSString *attachment = [self formatReportCSV];
    [picker addAttachmentData:[attachment dataUsingEncoding:NSStringEncodingConversionAllowLossy] mimeType:nil fileName:@"MyCSVFile.csv"];

whereformatReportCSVは csv 文字列を連結して返す関数です。

4

1 に答える 1