2017-10-27 12 views
0

私のRailsアプリケーションでは、this SO postで解説されているソリューションに基づいて、Postgresから大規模なCSVファイルを直接ストリーミングすることができました。照会されている列のPostgresqlのcopy_data関数を使用しているときに文字エンコーディングを正しく処理する方法は?

query = <A Long SQL Query String> 
response.headers["Cache-Control"] = "no-cache" 
response.headers["Content-Type"] = "text/csv; charset=utf-8" 
response.headers["Content-Disposition"] = 
    %(attachment; filename="#{csv_filename}") 
response.headers["Last-Modified"] = Time.now.ctime.to_s 
conn = ActiveRecord::Base.connection.raw_connection 

conn.copy_data("COPY (#{query}) TO STDOUT WITH (FORMAT CSV, HEADER TRUE, FORCE_QUOTE *, ESCAPE E'\\\\');") do 
    while row = conn.get_copy_data 
     response.stream.write row 
    end 
    end 
    response.stream.close 
end 

一部(VARCHAR)は、英語や中国語の文字列のいずれかなどの値を持っている:私の作業コードはややそうのように見えます。上記のコードから得られたCSVファイルは、そのまま中国語の文字を表示しません。代わりに、私はこのような何かを得る:

大大AE-‡‡AE-

私はcopy_data機能を使用しています方法を変更することになって、またはそこにあるアム私はこれを解決するためにCSVファイルに行うことができる何か?私はUTF-8 .txtファイルとしてファイルを保存しようとしただけでなく、copy_dataのドキュメントに記載されているconvert_to機能を試してみましたが、役に立たなかった。

答えて

0

これは、CSVファイルに含まれる元のエンコーディングに依存します。

は、Linux上でこれを行います。

file -i you_file 

は、UTF-16またはGB 18030ではありませんあなたは確かにいますか? また、どのようなエンコーディングでデータベースがセットアップされていますか?

これを見るにはpsqlで\ lを実行してください。

+0

@HervéPiedvacheさん、ありがとうございます。私は与えられた問題を解決する答えを加えました。 –

0

これは、私のMS Excelに中国語の文字を正しくレンダリングできないということです。 MacOSではNumbersアプリ(またはAtomなど)を使って同じ.csvファイルを開くと、この問題が解決されました。

関連する問題