問題文
多数の文字列を作成し、それらを連結して 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 文字列を連結して返す関数です。