Excel で作成された CSV ファイルを読み取る Java アプリがあります (2007 など)。これらのファイルを保存するためにMS Excelが使用する文字セットを知っている人はいますか?
私は次のいずれかを推測したでしょう:
- windows-1255 (Cp1255)
- ISO-8859-1
- UTF8
しかし、これらの文字セット タイプのいずれかを使用して、拡張文字 (たとえば、フランス語のアクセント付き文字) をデコードできません。
Excel で作成された CSV ファイルを読み取る Java アプリがあります (2007 など)。これらのファイルを保存するためにMS Excelが使用する文字セットを知っている人はいますか?
私は次のいずれかを推測したでしょう:
しかし、これらの文字セット タイプのいずれかを使用して、拡張文字 (たとえば、フランス語のアクセント付き文字) をデコードできません。
メモリから、Excel はマシン固有の ANSI エンコーディングを使用します。したがって、これは、EN-US インストールの場合は Windows-1252、ロシア語の場合は 1251 などになります。
CSV ファイルは、Excel からのエクスポート中に指定されたエンコード オプションに応じて、任意の形式にすることができます ([保存] ダイアログ、[ツール] ボタン、[Web オプション] 項目、[エンコード] タブ)。
更新: Excel (Office 2013 を含む) は、[名前を付けて保存] ダイアログで選択された Web オプションを実際には尊重しないため、これは何らかのバグです。現在、OpenOffice Calc を使用して XLSX ファイルを開き、CSV ファイルとしてエクスポートしています (フィルター設定を編集し、UTF-8 エンコーディングを選択します)。
先週も同様の問題がありました。さまざまなエンコーディングの CSV ファイルを多数受け取りました。データベースにインポートする前に、chardet ライブラリを使用して正しいエンコーディングを自動的に調べました。
Chardet は Mozilla の文字検出エンジンからの移植であり、サンプル サイズが十分に大きい場合 (1 つの強調文字では不十分)、非常にうまく機能します。
Russian Edition
オファーCSV
、CSV (Macintosh)
およびCSV (DOS)
。
プレーンCSV
で保存する場合は を使用しますwindows-1251
。
Résumé
ロシア語のテキストと一緒にフランス語の単語を保存しようとしたところ、 のコードである のHEX
よう52 3F 73 75 6D 3F
に保存されました。3F
ASCII
question mark
ファイルを開くとCSV
、もちろん文字が読めなくなりました( R?sum?
)
特殊文字を含む Excel ファイルを csv にエクスポートするのは面倒ですが、簡単な回避策があります。セルをコピーして Google ドキュメントに貼り付け、そこから保存するだけです。
この 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
cp1250 は、Word や Excel 2003 などの Microsoft Office ドキュメントで広く使用されています。
http://en.wikipedia.org/wiki/Windows-1250
これを確認する簡単な方法は次のとおりです。
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 );
}
}
ウィキペディアによると、Excel 2007 のようなOOXMLファイルは UTF-8 でエンコードされています。CSVファイルについてはわかりませんが、同じ形式を使用するのは当然です...