Skip to content

Instantly share code, notes, and snippets.

@okkez
Created May 20, 2011 03:12
Show Gist options
  • Save okkez/982278 to your computer and use it in GitHub Desktop.
Save okkez/982278 to your computer and use it in GitHub Desktop.

Ruby Encoding Cheat Sheet

  1. BINARY な文字列を使うときだけ force_encoding しなさい。
  2. ネットワークかファイルシステムから BINARY な文字列を受け取ったとき は、確実に正しいエンコーディングに force_encode しなさい。
    • 一般的に、HTTP における Content-Type ヘッダのようなもので ネットワークから受け取った BINARY な文字列のエンコーディング 情報は与えられている。
    • エンーコーディングがわからないときは、その文字列はずっと BINARY で扱いなさい。BINARY でない文字列との結合なんてし てはいけない。
  3. BINARY な文字列に force_encoding を呼び出したときは、直後に encode! を呼び出します。これはその文字列を default_internal エンコーディングに変換します。
  4. 正規表現で u オプションを使うときは、確実にユニコードな文字列だけを扱いなさい。
  5. 正規表現で n オプションを使うときは、確実に BINARY な文字列だけを扱いなさい。
  6. BINARY (ASCII-8BIT) ともう一つ互換性のないエンコーディングを受け取った場合、 正しいデバッグのアプローチは、BINARY 文字列がどこから来たか特定することです。 これは、ライブラリが BINARY データをネットワークから読み込んだが、エンコー ディング情報が与えられていないことを意味します。
  7. アプリケーションコードでは、* 絶対に * BINARY データを特定のエンコーディングに 変換するために force_encoding を使ってはいけない。アプリケーションコードに 辿り着いた時点で、どのエンコーディングが使われていたのかという情報を失っている。 代わりにその文字列が Ruby に入ってきた場所を見つけて、そのデータが持っている情報 に基いて正しいエンコーディングをセットするように修正してください。
  8. ライブラリのコードでは、どのエンコーディングが使われているかわかっている BINARY データをあるエンコーディングに変換するためだけに force_encoding を使用してください。 これはネットワークプロトコルのヘッダがある場合や、マジックコメントが ERB の テンプレートファイルやソースコードで使われている場合です。
  9. マジックコメントをソースファイルに含めるのは、実際にその エンコーディングの文字列をそのソースファイルに含む場合だけです。
  10. 二つの相異なるエンコーディングを持つ文字列を結合するには、 encode メソッドを使って二つの文字列のエンコーディングを 揃えてから結合します。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment