CHCSVWriter Unicode问题

时间:2011-08-15 17:56:55

标签: macos nsarray

我在使用CHCSVwriter将数组导出为CSV或Excel文件时遇到问题。

我有几个Arrays位于Persian language(它已本地化,且必须为UTF-8,至少在Windows中)。

使用CHCSVWriter(thanks, Dave)我可以将我的数组导出为CSV文件但不是默认设置。

由于我的数组编码(UTF8不起作用,我不知道为什么!!)但是更改CHCSVwriter.m我可以用我的本地化语言编写文件。

我有一个奇怪的问题:

1-如果我使用NSUTF8StringEncoding,那么我有一个标准的逗号分隔的CSV文件,能够用Excel正确地打开列正确的列分离但是表格单元格是未知的编码(我使用的是波斯语)

2-如果我使用NSUTF16StringEncoding,那么我有一个CSV文件,每行的整列写入一列!但语言和编码是对的!奇怪的是,excel无法检测到逗号,它打开一个只有一列的表,每行包含整列,我设计用逗号分隔整列!

另外,我还有另一个问题,我找不到为CHCSVWriter设置编码的方法,我必须从CHCSVWriter.m文件手动更改它!
CHCSVWriter.m的一部分:

- (void)_writeString:(NSString *)string {
//  if (encoding == 0) {
//      encoding = NSUTF8StringEncoding;
        encoding = NSUTF16StringEncoding;
//}

我的部分代码:

    NSString * tempFileName = [NSString stringWithFormat:@"sellExport.csv"];
    NSString * tempFile =[NSHomeDirectory() stringByAppendingPathComponent:tempFileName];

    NSLog(@"Writing to file: %@", tempFile);

    error = nil;
     CHCSVWriter *sellExporting = [[CHCSVWriter alloc] initWithCSVFile:tempFile atomic:NO];


    [sellExporting writeLine];
    for (int i = 0; i<=[purchaseCodes count] ; i++) {


        [sellExporting writeLineOfFields:[purchaseCodes objectAtIndex:i],[purchaseDates objectAtIndex:i],[purchaseCarBrands objectAtIndex:i],[purchaseCarSystems objectAtIndex:i],[purchaseCarModels objectAtIndex:i],[purchaseCarColors objectAtIndex:i],[purchaseCarChassis objectAtIndex:i],[purchaseCustomerNames objectAtIndex:i],[purchaseSharedNames objectAtIndex:i],[purchaseTotals objectAtIndex:i],[sellCodes objectAtIndex:i],[sellCustomerNames objectAtIndex:i],[sellDates objectAtIndex:i],[sellTotals objectAtIndex:i],[sellProfits objectAtIndex:i],[sellShareProfits objectAtIndex:i],nil];
        }
    [sellExporting closeFile];
    [sellExporting release];

1 个答案:

答案 0 :(得分:1)

由于没人能解决我的问题,

我发现 Microsoft Excell (mac)不支持 Unicode编码。 另一方面,由于这个事实,我使用 Perisan 语言进行数据输入,所以我必须使用NSUTF16StringEncoding(为什么UTF8StringEncoding不起作用?我不喜欢不知道!)当我打开.csv文件时,我的所有数据只有一列(我有16列)而 Microsoft Excell 无法检测逗号 (,)作为分隔分隔符!!!

无论如何,现在,我可以使用 NeoOffice OpenOffice 打开 UTF16 编码 CSV 文件很好地支持Unicode .csv文件没有任何问题!

所以,这完全是关于 Microsft 而不是 Dave deLong 的CHCSVWriter。 (再次感谢Dave)

这是我自己解决的第五个问题!!!

无论如何,谢谢大家。