質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

3回答

3186閲覧

Ruby におけるコメント ( # Encoding: utf-8 ) はどのように動作するか

iptwfys

総合スコア8

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

1クリップ

投稿2014/11/16 13:16

Ruby に以下のコメントがありますがはどのように動作するのでしょうか?

lang

1# Encoding: utf-8

他にもこのようなタイプのコメントが使われる状況はあるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

yohshiy

総合スコア863

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そのスクリプトがどのエンコーディングで書かれているかを指定します。
「スクリプトエンコーディングがutf-8である」のようにいいます。
c.f. スクリプトエンコーディング

文字列リテラル、正規表現リテラルなどのエンコーディングがそれになります。
また(普通しませんが)、変数名、メソッド名などにマルチバイト文字を使うことも出来るようになります。

あくまでソースに書かれた物についてコンパイル時にマジックコメントによる指定を参照するだけなので、
実行時の動作に影響するEncoding.default_externalEncoding.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

otn

総合スコア84423

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ソースコードを解析する前にインタプリタがこの行を読んでエンコードをUTF-8に設定するというものですが、インタプリタ言語では普通のことだと思います。 Python などの言語も同じアプローチを使います。

エンコードの設定は以下のように、いろいろな指定の方法があります。

# encoding: UTF-8
# coding: UTF-8
# -- coding: UTF-8 --

投稿2014/11/17 02:30

skytreebutrainy

総合スコア65

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問