質問

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: "_")
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top