掲題の通り、メジャーなLL言語についての文字コードについて質問です。
例えば
PHPでコンソール用にちょっとしたものを書くとき
#! /usr/local/php
print("文字列");
書いて、ターミナルで
php ./sample.php
などとすると問題なく「文字列」という文字が表示されます。
このとき、ファイルはUTF-8で書いたとします。
次に、別のLL言語pythonで下記の様に記述したとします。
#! /usr/local/python
print ("python文字列");
上記内容を
python ./sample.py
などと実行すると
SyntaxError: Non-ASCII character '\xe6' in file
と上記のようなエラーがでます。どうやらアスキーコードの範囲外のバイト数が含まれているようです。
これを
#! /usr/local/python
#coding: utf-8
print ("python文字列");
としてやると問題なく「python 文字列」と表示されると思います。
これはRubyでも同じだと思います。
また同じ様に
#! /usr/bin/bash
echo "文字列"
とシェルスクリプトで上記の様にかいてやると・・・
問題なく「文字列」と表記されます。
ではなぜシェルスクリプト(bash)やPHPはマジックコメントを記述しなくても
暗黙のうちにUTF-8で文字列が表記されて
pythonやRubyは明示的にUTF-8とマジコメを記述しなければならないのでしょうか?
ご教授ください。
No.1ベストアンサー
- 回答日時:
文字コードについては、2つの考え方があります。
一つは、「文字列は一旦内部で共通のコードに変換して、外部に出力するときは、その出力先の文字コードに変換する」
もう一つは、「文字コード等考えずに、書かれたままのバイナリーデータを出力する」
シェルは基本的に後者です。
「文」「字」「列」という3文字だとは認識していません。
UTF-8なら「文の1バイト目」「文の2バイト目」「文の3バイト目」「字の1バイト目」... という 9文字だと認識しています。
この9バイトの列を「UTF-8だと解釈して表示する端末」を使うと「文字列」と読めます。
利点は「解釈しないのそのまま使える」こと
欠点は「日本語等の1文字を『1文字』として扱えない」こと、あるいは、「日本語等の1文字を扱うために、特別な方法が必要」ということです。
Pythonは前者です。
利点は「日本語等の1文字を『1文字』としてあつかえる」
欠点は「内部コードへの変換のために、元がどのコードなのか判断する必要がある」ということです。
自動判定、というのもないわけではないですが、誤判定してしまうという問題があります。
確実なのは、「書いた人に聞く」ことです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アップロードファイルを表示す...
-
PHPでこのコード自体に意味は無...
-
phpでcookieがうまく保存されない
-
PHPの構文で間違えが分からない
-
index.phpって何ですか? 具体...
-
PHP8を使うと、大量のWarningが...
-
返信機能のツリー構造の深さを...
-
PHPについて。
-
index.phpに入るには、どうすれ...
-
PHPSpreadsheetを使って関数を...
-
複数のパソコンの中の1つのパソ...
-
こちらはただの直列処理ですか?
-
awsにApacheとPHPを入れて、何...
-
入力した部分を表示させたまま...
-
ページング phpの書き方がわか...
-
phpのheader("Location:#pos")...
-
PHPからCSVをアップロード後、m...
-
[php初心者]サイトを見てデータ...
-
phpに関わる所での、form actio...
-
ゆゆにゃ。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpでcookieがうまく保存されない
-
PHP8を使うと、大量のWarningが...
-
PHPで画像の渡しが上手く行きま...
-
PHPSpreadsheetを使って関数を...
-
PHP一覧表示した項目にリンクを...
-
フォームで戻った際に入力済み...
-
ワードプレスプラグイン MW WP ...
-
PHPについて。
-
jpgraphで表示されない
-
$_SESSIONについて教えて下さい。
-
クラス
-
phpに関わる所での、form actio...
-
PHP ページング データベース
-
php 入力画面から確認表示画面...
-
index.phpって何ですか? 具体...
-
アコーディオンPHPが上手くいか...
-
1 OR 1=1 は どんな論理(約束事...
-
reuterの記事をbeautiful.soup....
-
phpのメールフォームの完了画面...
-
PHPSpreadsheetによる書き出し...
おすすめ情報