Linux だと書いた文字コードでそのまま記録してくれるみたいなんだけど、
Windows の場合、少なくとも XP SP3 に Cygwin 1.7.7 の ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin] の環境だと
LANG で指定されてる文字コード以外をファイル名に与えると途中でコード自体に変な変換施されて文字化けする模様。
とりあえず以下のような感じで tempfile 実際に書いてみて文字化けしないかチェックすると良さげ。
結果はこんな感じ
Windows の場合、少なくとも XP SP3 に Cygwin 1.7.7 の ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin] の環境だと
LANG で指定されてる文字コード以外をファイル名に与えると途中でコード自体に変な変換施されて文字化けする模様。
とりあえず以下のような感じで tempfile 実際に書いてみて文字化けしないかチェックすると良さげ。
#!/usr/bin/ruby # # get_effective_charcode_for_filename.rb # # $Id: $ # require 'kconv' require 'tempfile' def get_effective_charcode_for_filename out_codes = { Kconv::EUC => "EUC", Kconv::SJIS => "SJIS", Kconv::UTF8 => "UTF-8", } result = [] base = Tempfile.new("").path fn = base + "_◎◇文字コード判別" [Kconv::SJIS, Kconv::EUC, Kconv::UTF8].each do |out_code| fn2 = fn.kconv(out_code) File.open(fn2, "w") do |f| if f.path == Dir[base + "_*"].join result.push out_codes[out_code] end f.close File.unlink(f.path) end end result end if __FILE__ == $0 # $DEBUG = true p get_effective_charcode_for_filename end
結果はこんな感じ
環境 | RUBY | LANG | 結果 |
---|---|---|---|
XP SP3, Cygwin 1.7.7 | 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin] | ["UTF-8"] | |
XP SP3, Cygwin 1.7.7 | 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin] | ja_JP.SJIS | ["SJIS"] |
XP SP3, Cygwin 1.7.7 | 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin] | ja_JP.EUC-JP | ["EUC"] |
XP SP3, Cygwin 1.7.7 | 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin] | ja_JP.UTF-8 | ["UTF-8"] |
Debian, linux-image-2.6.32-5-amd64 | 1.8.7 (2010-08-16 patchlevel 302) [i486-linux] | ja_JP.SJIS | ["SJIS", "EUC", "UTF-8"] |
Debian, linux-image-2.6.32-5-amd64 | 1.8.7 (2010-08-16 patchlevel 302) [i486-linux] | ja_JP.EUC-JP | ["SJIS", "EUC", "UTF-8"] |
Debian, linux-image-2.6.32-5-amd64 | 1.8.7 (2010-08-16 patchlevel 302) [i486-linux] | ja_JP.UTF-8 | ["SJIS", "EUC", "UTF-8"] |
タグ
コメントをかく