3

次のように、文字列エンコーディングを指定するいくつかの方法を見てきました。

  1. # -*- coding: utf-8 -*-
  2. # coding: utf-8
  3. # encoding: utf-8
  4. #!/usr/bin/env ruby -Ku
  5. #!/usr/bin/env ruby -Eutf-8
  6. Encoding.default_external = "utf-8"

他にもありますか?違いがあれば教えてください。また、起源があれば教えてもらえますか? 古いものと新しいものがありますか。マイナーなものと人気のあるもの。価値の低いものと価値のあるもの?

4

2 に答える 2

4

TL;DR バージョン:# coding: utf-8またはを使用し# encoding: utf-8ます。それらは現代的であり、それらの間に違いはありません。


この最も啓発的な記事によると、Ruby 1.9 のルールでは、マジック コメントは次のようにする必要があります。

コードの最初の行は、コーディングという単語を含むコメントで、その後にコロンとスペースが続き、エンコーディング名が続きます...

これは 1、2、3 をカバーし、おそらく次のようなものも含ま# foobarcoding: utf-8れます。これは、Ruby 1.9 で推奨される方法です。

互換性の理由-K*から、4 をカバーする Ruby 1.8 のハッシュ バング スイッチが保持されています。

数字の 5 と 6 は、少し異なる内容をカバーしています。外部エンコーディングと内部エンコーディングが正確にどのように機能するかを確認するには、前述の記事を読むことをお勧めします。ただし、要点は、IO オブジェクトを介してデータを読み取る場合、そのデータを正しく読み取るためにどのようにエンコードするかが重要であるということです。外部エンコーディングはまさにそれを表現しています。したがって、外部エンコーディングを UTF-8 に設定すると、読み取っているファイルが UTF-8 でエンコードされていることを意味します。内部エンコーディングは、Ruby がその操作の結果の文字列を自動的にトランスコードする必要があるエンコーディングです。

外部エンコーディングが明示的に設定されていない場合は、設定しているデフォルトが使用されます。これらのデフォルトは、ハッシュ bang のフラグを介して変更できます-E(番号 5。したがって、5 と 6 は同じように機能します)。

渡す-Uと、内部エンコーディングが UTF-8 に設定されます (つまり、文字列は読み取り時に自動的に UTF-8 にトランスコードされます)。

于 2011-12-11T23:00:15.393 に答える
1

2 番目と 3 番目は基本的に同じで、ファイルごとにエンコードを指定します。「コーディング」だけが必要ですが、「エンコーディング」には「コーディング」という単語が含まれているため、それも機能します。他のものは覚えていませんが、Peter Cooper の Ruby 1.9 チュートリアルでは、いくつかの違いについて説明しています。

于 2011-12-11T22:50:36.737 に答える