保存文件时Microsoft Excel使用什么字符集?

时间:2009-02-03 19:32:26

标签: excel encoding character-encoding

我有一个Java应用程序,它读取已在Excel中创建的CSV文件(例如2007)。有谁知道MS Excel用于保存这些文件的字符集?

我会猜到:

  • windows-1255(Cp1255)
  • ISO-8859-1
  • UTF8

但我无法使用这些字符集类型解码扩展字符(例如法语强调字母)。

11 个答案:

答案 0 :(得分:41)

从内存中,Excel使用机器特定的ANSI编码。所以这将是用于EN-US安装的Windows-1252,用于俄语的1251等等。

答案 1 :(得分:14)

CSV文件可以采用任何格式,具体取决于从Excel导出期间指定的编码选项:(保存对话框,工具按钮,Web选项项,编码选项卡)

更新:Excel(包括Office 2013)实际上并不尊重在“另存为...”对话框中选择的Web选项,因此这是某种错误。我现在只使用OpenOffice Calc打开我的XLSX文件并将其导出为CSV文件(编辑过滤器设置,选择UTF-8编码)。

答案 2 :(得分:4)

上周我遇到了类似的问题。我收到了许多带有不同编码的CSV文件。在导入数据库之前,我使用chardet libary自动嗅出正确的编码。

Chardet是一个来自Mozillas角色检测引擎的端口,如果样本大小足够大(一个突出的角色不会这样做),效果非常好。

答案 3 :(得分:4)

唤醒这个旧线程......我们现在是2017年。而Excel仍然无法将简单的电子表格保存为CSV格式,同时保留原始编码......真是太棒了。

幸运的是,Google Docs生活在正确的世纪。对我来说,解决方案只是使用Google文档打开电子表格,而不是将其作为CSV下载。结果是一个正确编码的CSV文件(所有字符串都以UTF8编码)。

答案 4 :(得分:2)

Russian Edition提供CSVCSV (Macintosh)CSV (DOS)

以普通CSV保存时,它使用windows-1251

我只是尝试将法语单词Résumé与俄语文本一起保存,它将其保存在HEX52 3F 73 75 6D 3F3FASCII代码question mark

当我打开CSV文件时,这个词当然变得不可读(R?sum?

答案 5 :(得分:0)

您可以使用此Visual Studio VB.Net代码来获取编码:

Dim strEncryptionType As String = String.Empty
Dim myStreamRdr As System.IO.StreamReader = New System.IO.StreamReader(myFileName, True)
Dim myString As String = myStreamRdr.ReadToEnd()
strEncryptionType = myStreamRdr.CurrentEncoding.EncodingName

答案 6 :(得分:0)

如果选择$haystack = array( 'Horse', 'DHL', 'DHL - 123', 'Pedestrian', 'Philosopher', 'DHL-123', 'DHL - 123' ); $needle = 'DHL - '; // Find all values with DHL $test = array_filter($haystack, function($el) use ($needle) { return (strpos($el, $needle) !== false); }); // Unset the values foreach (array_keys($foundRows) as $key) { unset($haystack[$key]); } ,Excel 2010将保存UTF-16 / UCS-2 TSV 文件。 (强制)后缀为“ .txt”,您可以将其更改为“ .tsv”。

如果需要CSV,则可以在文本编辑器(如Notepad ++,Ultra Edit,Crimson Editor等)中转换TSV文件,并用分号,逗号等代替制表符。请注意,例如为了读取数据库表,TSV通常已经可以正常工作了(通常更容易手动读取)。

如果您需要不同的代码页(如UTF-8),请使用上述编辑器之一进行转换。

答案 7 :(得分:0)

您可以使用编码 UTF8 + BOM (https://en.wikipedia.org/wiki/Byte_order_mark) 创建 CSV 文件。

前三个字节是 BOM (0xEF,0xBB,0xBF),然后是 UTF8 内容。

答案 8 :(得分:-1)

cp1250广泛用于Microsoft Office文档,包括Word和Excel 2003。

http://en.wikipedia.org/wiki/Windows-1250

确认这一点的一个简单方法是:

  1. 创建一个包含更高订单字符的电子表格,例如其中一个牢房中有“Veszprém”;
  2. 使用您喜欢的脚本语言来解析和解码电子表格;
  3. 查看打印解码数据时脚本产生的内容。
  4. perl脚本示例:

    #!perl
    
    use strict;
    
    use Spreadsheet::ParseExcel::Simple;
    use Encode qw( decode );
    
    my $file    = "my_spreadsheet.xls";
    
    my $xls     = Spreadsheet::ParseExcel::Simple->read( $file );
    my $sheet   = [ $xls->sheets ]->[0];
    
    while ($sheet->has_data) {
    
        my @data = $sheet->next_row;
    
        for my $datum ( @data ) {
            print decode( 'cp1250', $datum );
        }
    
    }
    

答案 9 :(得分:-2)

虽然将包含特殊字符的excel文件导出到csv确实很麻烦,但是有一个简单的解决方法:只需将单元格复制/粘贴到google文档中然后从那里保存即可。

答案 10 :(得分:-3)

根据维基百科,

OOXML来自Excel 2007的文件以UTF-8编码。我不知道有关CSV文件的信息,但可以肯定它会使用相同的格式...