「Ruby プログラミング言語」を読んでいます。セクション 3.2.6.1「Ruby 1.9 のマルチバイト文字」では、Ruby の文字列の最適化が紹介されています。
文字列リテラルに 7 ビット ASCII 文字のみが含まれる場合、ソース エンコーディングが UTF-8 であっても、エンコーディング メソッドは ASCII を返します。
Ruby 1.9.1-p431、1.9.2、および 1.9.3-p125 の両方で次の簡単なスクリプトを試してみました。どちらも 7 ビット ASCII 文字に UTF-8 エンコーディングを使用しています。
# coding: utf-8
s = 'hello'
p s.encoding
# result is #<Encoding:UTF-8>
Ruby 1.9 の開発中にこの動作が変更されたのかもしれません。Ruby 1.9 の変更ログを検索しようとしましたが、1.9.1 の変更ログでこの動作が確認されました。また、Ruby の git リポジトリのクローンを作成しましたが、この動作の変更について言及しているコミットが見つかりません。
アップデート:
Ruby のソース コード リポジトリを見ると、2008 年 1 月にリリースされた Ruby 1.9.0 での動作だと思います (Debian 6 ではコンパイルに失敗したため、正確には確認できません) 。 Language" は優れた本で、もともとは 2008 年に出版されたものです。本の説明が古くなっている可能性が非常に高いです。
別の時代遅れの説明は、Encoding.list
メソッドの動作に関するものです。したがって、この本も読んでいる場合は、古い説明に注意してください。