私の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
機能を試してみましたが、役に立たなかった。
@HervéPiedvacheさん、ありがとうございます。私は与えられた問題を解決する答えを加えました。 –