この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
文字列のblank?メソッドは正規表現を使っていますので、UTF-8的に正しいバイト列ですかチェックしています。
型によって、blank?の処理が違います。
文字列の場合、正規表現で判断しています。
配列の場合、Arrayのempty?と同じです。
ハッシュの場合、Hashのempty?と同じです。
blank.rbの一部ソースコード:
class String
def blank?
self !~ /[^[:space:]]/
end
end
class Array
alias_method :blank?, :empty?
end
class Hash
alias_method :blank?, :empty?
end
Ruby 1.9 でUTF-8的に正しくないバイト列がある文字列を扱っていると、
正規表現マッチや gsub といったメソッドを使っているところで ArgumentError: invalid byte sequence in UTF-8 例外が発生します。
文字列を生成したときではなくて正規表現マッチなんかをしたときに始めてエラーが出るのです。
例:
str = “\xC1\xB9\xA4\xB1\xA4\xF3\xA4\xC1\xA4\xF3\xBD\xC1”
begin
str.blank?
rescue => e
p e # ArgumentError: invalid byte sequence in UTF-8
end
文字列のblank?メソッドは正規表現を使っていますので、UTF-8的に正しいバイト列ですかチェックしています。
配列の要素に対して、正しいUTF8バイト列をチェックするため、要素に対して、blank?を使用します。