カテゴリー「ruby」の記事

ssh-netで日本語入力を通す (ruby 1.9)

net-ssh gemを使って、「echo "あいう" > /dev/null」など日本語が含まれるコマンドを実行すると

incompatible character encodings: ASCII-8BIT and UTF-8 (Encoding::CompatibilityError)

で落ちてしまいます。以下のようにすれば、日本語も問題無く通ります。

# -*- encoding: utf-8 -*-
require 'net/ssh'

module Net; module SSH
  class Buffer
    def write(*data)
      data.each { |datum|
        @content << datum.force_encoding('ASCII-8BIT')
      }
      self
    end
  end
end; end;

標準出力のほうは、問題なく日本語(UTF-8)が通ります。

備忘録 : デバッグ出力

require 'binding_of_caller'
def debug(var_name)
  param = 'puts "' + var_name.to_s + ' = #{' + var_name.to_s + '.inspect}"'
  binding.of_caller(1).eval(param)
end

aa = "aaaaaaaa"

debug :aa
aa = "aaaaaaaa"

良い感じですね。

[参考]

[heroku] 文字コードの自動判定をどうするか?

Instapaperの文字化け対応ツール
の件で一番困った問題。

1. ruby1.9の場合nkfがついてくるが、ヨーロッパ系の言語など対応できない。

2. charlock_holmesが最強だが、ICUのライブラリがherokuに無いため利用出来ない。

3. rCharDetならnativeライブラリ不要なのでherokuでも使えるが、本家はruby1.9で利用できない。

4. https://github.com/kirillrdy/rchardet
なら動くが、日本語処理に問題がある。

・SJIS文章を食わせると、落ちる

jpcntx.rbの定数が小文字になっているため
「JP_2_CHAR_CONTEXT」にソースの書き換えが必要。

・EUC文章の判定に失敗する (JIS, SJIS, UTF-8は問題無かった)

他の言語に判定されるが、確度が0.6ほどとかなり低い。
それを基にnkfなどで再判定する。
(日本語のデータが主な処理対象なら、この方法でもいいかと思っています)

CSRF用のキー簡易生成

大丈夫そうなキーを生成する
# もちろん、使えるならRackの機能の方がいいです。

require 'openssl'

def csrf
key = OpenSSL::Random.random_bytes(16)
key.bytes.map{|b| "%02x" % b}.join
end

その他のカテゴリー

2016年10月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

ついったー

無料ブログはココログ