Rubyを使用したUTF8からANSIへの変換
質問
LinuxマシンでUTF8 CSVファイルをリモートで生成し、SFTPを介してWindowsマシンにファイルを転送するRubyスクリプトがあります。
このファイルをExcelで開く必要がありますが、ExcelはUTF8を取得しないため、UTF8をANSIに変換できるテキストエディターでファイルを常に開く必要があります。
Rubyを使用してプログラムでこれを行い、手動の変換手順を回避したいと思います。最も簡単な方法は何ですか?
PS:iconvを使用しようとしましたが、成功しませんでした。
解決
ascii_str = yourUTF8text.unpack("U*").map{|c|c.chr}.join
テキストが本当にASCII文字セットに適合すると仮定します。
他のヒント
ようやくiconvを使用してそれを行うことができました。パラメーターを台無しにしただけです。だから、これはあなたがそれを行う方法です:
require 'iconv'
utf8_csv = File.open("utf8file.csv").read
# gotta be careful with the weird parameters order: TO, FROM !
ansi_csv = Iconv.iconv("LATIN1", "UTF-8", utf8_csv).join
File.open("ansifile.csv", "w") { |f| f.puts ansi_csv }
それだけです!
サーバー上のユーザー生成コンテンツからCSVファイルを生成しようとすると、同様の問題が発生しました。 Unicode文字をASCIIに音訳する素晴らしい仕事をする unidecoder gemを見つけました。
例:
"olá, mundo!".to_ascii #=> "ola, mundo!"
"你好".to_ascii #=> "Ni Hao "
"Jürgen Müller".to_ascii #=> "Jurgen Muller"
"Jürgen Müller".to_ascii("ü" => "ue") #=> "Juergen Mueller"
単純なユースケースでは、これはうまくいきました。
Pivotal Labsには、 asciiへのユニコード変換に関する優れたブログ投稿があります。 a>これについて詳しく説明します。
Ruby 1.9以降、より簡単な方法があります:
yourstring.encode('ASCII')
無効な(非ASCII)文字の問題を回避するには、問題を無視できます:
yourstring.encode('ASCII', invalid: :replace, undef: :replace, replace: "_")
所属していません StackOverflow