
掲題の通り、メジャーな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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP8でWarning:Undefined varia...
-
composerをインストールしたい...
-
phpの問い合わせフォームを作っ...
-
phpでcookieがうまく保存されない
-
PHP8を使うと、大量のWarningが...
-
HTML PHP ラジオボタンのイベント
-
SplFileObject を利用したとき...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
SFTPなどは使わないホームペー...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
php でqiitaのサイトにあったフ...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
-
phpのheader("Location:#pos")...
-
PHPからCSVをアップロード後、m...
-
[php初心者]サイトを見てデータ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHP8でWarning:Undefined varia...
-
phpの問い合わせフォームを作っ...
-
composerをインストールしたい...
-
BASIC認証のフォームをデザイン...
-
SplFileObject を利用したとき...
-
phpでcookieがうまく保存されない
-
PHPのセッション有効期限について
-
PHPで画像の渡しが上手く行きま...
-
PHP8を使うと、大量のWarningが...
-
フォームで戻った際に入力済み...
-
Q&Aサイトを作成していてURLの...
-
PHPを使って、別サイトの一部を...
-
$_SESSIONに渡した後はそのまま...
-
reuterの記事をbeautiful.soup....
-
PHPSpreadsheetを使って関数を...
-
PHPのエラーの解消法について教...
-
ファイルの遷移がうまく行われ...
-
PostgreSQLからCSV形式でエクス...
-
php エラー
-
HTML PHP ラジオボタンのイベント
おすすめ情報