Ruby に以下のコメントがありますがはどのように動作するのでしょうか?
lang
1# Encoding: utf-8
他にもこのようなタイプのコメントが使われる状況はあるのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ご質問のコメントは magic comment といってソースファイルの文字コードを指定するためのものです。
これは日本語(非ASCII)の文字列リテラルを使う場合に必要になってきます。
例えば、ソースファイルが Shift-JIS で、次のようなコードを書いたとします。
lang
1# encoding: sjis 2str = "あいうえお" 3p str[0] # "あ"
str はマルチバイト文字列ですが、 「あ」 をちゃんと一文字として認識できるようになっています。
しかし、 magic comment を書いていないと、文字列が認識できず、エラーが発生します。
lang
1str = "あいうえお" 2p str[0] 3# デフォルトは UTF-8 なので、エラーが発生 4# ja.rb:1: invalid multibyte char (UTF-8)
cf. Ruby 配列の要素の中の1文字だけを要素内全て出力したい| teratail
cf. Ruby 文字列の最後の文字を取り除きたい| teratail
投稿2014/11/17 07:33
総合スコア863
0
そのスクリプトがどのエンコーディングで書かれているかを指定します。
「スクリプトエンコーディングがutf-8である」のようにいいます。
c.f. スクリプトエンコーディング
文字列リテラル、正規表現リテラルなどのエンコーディングがそれになります。
また(普通しませんが)、変数名、メソッド名などにマルチバイト文字を使うことも出来るようになります。
あくまでソースに書かれた物についてコンパイル時にマジックコメントによる指定を参照するだけなので、
実行時の動作に影響するEncoding.default_external
や Encoding.default_internal
とは独立(無関係)であり、それらの指定が必要なときは、ちゃんと設定する必要があります。
逆に、rubyの-E
起動オプションやコード中で Encoding.default_external
Encoding.default_internal
を設定しても、ソースをutf-8以外で書いたときはマジックコメントが必要です。
他にもこのようなタイプのコメントが使われる状況はあるのでしょうか?
Rubyだとスクリプトエンコーディングの指定だけですね。
EmacsやViなどのエディタでは、マジックコメント(Viだとモードライン)で、ファイルテキストの属性(エンコーディングやタブ位置、改行コードなど)を指定できます(もっとできる)。
もともと、EmacsやViでスクリプトを書いてた人はそういう風にエンコード指定をソーススクリプトに埋め込んでいたので、PythonやRuby等のような言語がそれをついでに参照するようになったわけです。
投稿2014/11/17 03:29
総合スコア84423
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ソースコードを解析する前にインタプリタがこの行を読んでエンコードをUTF-8に設定するというものですが、インタプリタ言語では普通のことだと思います。 Python などの言語も同じアプローチを使います。
エンコードの設定は以下のように、いろいろな指定の方法があります。
# encoding: UTF-8
# coding: UTF-8
# -- coding: UTF-8 --
投稿2014/11/17 02:30
総合スコア65
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。