64

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

我会猜到:

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

但我无法使用这些字符集类型中的任何一种解码扩展字符(例如法语重音字母)。

4

11 回答 11

42

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

于 2009-10-01T06:03:23.820 回答
18

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

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

于 2010-05-17T20:34:53.187 回答
13

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

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

于 2017-02-02T15:21:40.590 回答
4

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

Chardet 是 Mozilla 字符检测引擎的一个端口,如果样本量足够大(一个强调字符不会做),效果会非常好。

于 2009-02-03T19:44:48.190 回答
2

Russian Edition提供和。CSV_CSV (Macintosh)CSV (DOS)

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

我只是尝试将法语单词Résumé与俄语文本一起保存,它保存为HEXlike 52 3F 73 75 6D 3F3F作为.ASCIIquestion mark

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

于 2009-02-03T19:45:16.770 回答
0

Excel 2010 会保存一个 UTF-16/UCS-2 TSV文件,如果您选择File > Save As > Unicode Text (.txt). 它是(强制)后缀“.txt”,您可以将其更改为“.tsv”。

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

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

于 2018-12-18T09:29:36.833 回答
-1

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

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

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

  1. 在其中一个单元格中创建具有更高阶字符的电子表格,例如“Veszprém”;
  2. 使用您最喜欢的脚本语言来解析和解码电子表格;
  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 );
    }

}
于 2009-10-01T05:47:56.613 回答
-1

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

于 2012-06-14T22:18:02.730 回答
-1

您可以使用此 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
于 2016-06-28T14:59:52.360 回答
-1

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

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

于 2021-01-13T15:20:57.097 回答
-3

根据维基百科的说法,像 Excel 2007 中的OOXML文件是用 UTF-8 编码的。我不知道 CSV 文件,但它有理由使用相同的格式......

于 2009-02-03T19:41:03.020 回答