2012年8月3日金曜日

writeexcelで半角カタカナを表示したい。

railsのgemにwriteexcelがあります。 railsでexcelを作成しようというものです。 それで「テスト」みたいな半角カタカナをexcelに入力したかったので修正しました。 対象箇所はここです。 writeexcel-0.6.16/lib/writeexcel/helper.rb
def utf8_to_16be(utf8)
  ruby_18 { NKF.nkf('-w16B0 -m0 -W', utf8) } ||
  ruby_19 do
    utf16be = NKF.nkf('-w16B0 -m0 -W', utf8)
    utf16be.force_encoding('UTF-16BE')
  end
end

private :utf8_to_16be

def utf8_to_16le(utf8)
  ruby_18 { NKF.nkf('-w16L0 -m0 -W', utf8) } ||
  ruby_19 do
    utf16le = NKF.nkf('-w16L0 -m0 -W', utf8)
    utf16le.force_encoding('UTF-16LE')
  end
end

private :utf8_to_16le
NKFのオプションについて -X を指定すると、 nkf は半角カタカナを自動的に全角カタカナに変換します。 -X はデフォルトで指定されているため、この動作を望まない場合は -x を指定してください。 http://jp.rubyist.net/magazine/?0009-BundledLibraries#l15 おぉ、なるほど。そういうことか。モンキーパッチ!?
 def utf8_to_16be(utf8)
  ruby_18 { NKF.nkf('-w16B0 -m0 -xW', utf8) } ||
  ruby_19 do
    utf16be = NKF.nkf('-w16B0 -m0 -xW', utf8)
    utf16be.force_encoding('UTF-16BE')
  end
end

private :utf8_to_16be

def utf8_to_16le(utf8)
  ruby_18 { NKF.nkf('-w16L0 -m0 -xW', utf8) } ||
  ruby_19 do
    utf16le = NKF.nkf('-w16L0 -m0 -xW', utf8)
    utf16le.force_encoding('UTF-16LE')
  end
end

private :utf8_to_16le

0 件のコメント: