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

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

我会猜到:

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

但我无法使用这些字符集types中的任何一种来解码扩展字符(例如法语突出字母)。

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

更新:Excel(包括Office 2013)实际上并不尊重在“另存为…”对话框中select的网页选项,所以这是某种错误。 我现在只使用OpenOffice Calc来打开我的XLSX文件并将它们导出为CSV文件(编辑filter设置,selectUTF-8编码)。

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

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

Chardet是一个来自Mozillaangular色检测引擎的端口,如果样本量足够大(一个强调的angular色不会这么做)的效果非常好。

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

当以纯CSV保存时,它使用windows-1251

我只是试图把法文单词Résumé和俄语文本一起保存起来,就像52 3F 73 75 6D 3F3Fquestion markASCII码一样保存在HEX

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

唤醒这个旧的线程…我们现在在2017年。仍然Excel无法将简单的电子表格保存为CSV格式,同时保留原始编码…只是令人惊叹。

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

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

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

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

  1. 创build一个高位字符的电子表格,例如一个单元格中的“Veszprém”;
  2. 使用您最喜爱的脚本语言来parsing和解码电子表格;
  3. 看看你的脚本在打印出解码的数据时产生了什么。

示例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 ); } } 

你可以使用这个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 

虽然将包含特殊字符的excel文件导出到csv是一件很痛苦的事情,但是还是有一个简单的解决办法:简单地将单元格复制/粘贴到Google文档中,然后从那里保存。

根据维基百科,来自Excel 2007的OOXML文件以UTF-8编码。 我不知道有关CSV文件,但它的原因是它会使用相同的格式…