Sha256: 6ebfa8559fb65ecbfc5467f92c3119c7047189d47c90c51b293bfa72881d3268

Contents?: true

Size: 1.62 KB

Versions: 1

Compression:

Stored size: 1.62 KB

Contents

module WebLoader
  module Utils
    UTF_8 = 'UTF-8'

    def toutf8_charset(str, charset)
      # charsetが指定されていない場合はnil
      return nil if charset.to_s.length == 0
      # 文字列のcharsetを変更する
      str.force_encoding(charset)
      # force_encodingが失敗した場合はnil
      return nil unless str.valid_encoding?

      result = nil
      if charset =~ /#{UTF_8}/i
        result = str
      else
        # エンコーディングがUTF8じゃない場合変換する
        result = str.encode(UTF_8, invalid: :replace, undef: :replace)
      end
      result
    end

    def toutf8(str, charset)
      # 2022/04/04(月)
      # GITHUBのアポストロフィ(&#x2019 U+2019)が文字化け問題に対処するために新設。
      # 原因は直接Kconv.toutf8にresponse.bodyをわたしていたことなので(Kconvのguessが失敗していたと思われる)、
      # response.type_paramsを見てそれにforce_encodingすることで対処する。渡されているcharsetとWebページの文字コードが一致していればこれで問題はないはず。
      result = nil
      begin
        # 指定されたcharsetで変換する
        result = toutf8_charset(str.dup, charset)
        # charsetによる変換が失敗した場合Kconvを使用
        result = Kconv.toutf8(str) if result.nil?
      rescue => ex
        puts ex.message
      end
      result
    end

    def to_redirect_url(orig_uri, location)
      redirect_url = location
      if location =~ /^\//
        redirect_url = URI.join(orig_uri, location).to_s
      end
      redirect_url
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
web_loader-1.1.0 lib/web_loader/utils.rb