问题陈述
我创建了多个字符串,将它们连接在一起形成 CSV 格式,然后将字符串作为附件通过电子邮件发送。
当这些字符串仅包含 ASCII 字符时,将正确构建 CSV 文件并通过电子邮件发送。当我包含非 ASCII 字符时,结果字符串格式错误,并且无法正确创建 CSV 文件。 (电子邮件视图显示附件,但未发送。)
例如,这有效:
uncle bill's house of pancakes
但这不是(注意大撇号):
uncle bill’s house of pancakes
Question
如何正确创建和编码最终字符串,以便包含所有有效的 unicode 字符并正确形成结果字符串?
Notes
这些字符串是通过 UITextField 创建的,然后写入核心数据存储并从中读取。
这表明问题在于字符串的初始创建和编码:NSString unicode编码问题
我不想这样做:从 Objective-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];
}
Edit:电子邮件已发送:
NSString *attachment = [self formatReportCSV];
[picker addAttachmentData:[attachment dataUsingEncoding:NSStringEncodingConversionAllowLossy] mimeType:nil fileName:@"MyCSVFile.csv"];
where formatReportCSV
是连接并返回 csv 字符串的函数。