1

jruby on rails webappからExcelにデータをエクスポートしたいので、csv文字列を作成し、を使用してダウンロードとしてクライアントに送信します。

send_data(text, :filename => "file.csv", :type => "text/csv; charset=CP1252", :encoding => "CP1252")

ファイルはExcelが正しく読み取れないUTF-8にあるようです。私は問題をグーグルで検索し、iconvがエンコーディングを変換できることを発見しました。私はそれをしようとします:

ic = Iconv.new('CP1252', 'UTF-8')
text = ic.iconv(text)

しかし、変換されたテキストを送信しても、違いはありません。それはまだUTF-8であり、Excelは特殊文字を読み取ることができません。iconvを使用するいくつかの解決策があるので、これは他の人にとってはうまくいくようです。Linuxシェル上のファイルをiconvを使用して手動で変換すると、機能します。

私は何が間違っているのですか?もっと良い方法はありますか?

使用しているもの:-jruby 1.3.1(ruby 1.8.6p287)(2009-06-15 2fd6c3d)(Java HotSpot(TM)Client VM 1.6.0_19)[i386-java]-DebianLenny-Glassfishアプリサーバー-Iceweasel3.0。 6

編集:iconvを使用するためにいくつかの宝石を含める必要がありますか?

解決策:S.Markはこの解決策を指摘しました:Excelに次のように理解させるには、UTF-16LEエンコーディングを使用する必要があります。

text= Iconv.iconv('UTF-16LE', 'UTF-8', text)

その答えをありがとう、S.Mark。

4

2 に答える 2

1

私の経験によると、ExcelはUTF-8CSVファイルを適切に処理できません。代わりにUTF-16を試してください。

:ExcelのテキストのインポートウィザードはUTF-8でも機能するようです

編集:スタックオーバーフローの検索でこのページが表示されます。ご覧ください。

それによると、CSVにBOM(バイト順マーク)署名を追加すると、Excelテキストインポートウィザードがポップアップ表示されるため、回避策として使用できます。

于 2010-04-23T10:08:24.487 に答える
0

次のように同じ結果が得られますか?

cp1252= Iconv.conv("CP1252", "UTF8", text)
于 2010-04-23T10:11:53.810 に答える