掲題の通り、メジャーな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で質問しましょう!
似たような質問が見つかりました
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Excel(エクセル) Excelの数式の質問です。 A列に「redhat 8.0, centOS 7.9, python 4 2023/05/12 19:38
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Java VScodeのターミナルの文字化けについて 1 2022/09/27 22:19
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Visual Basic(VBA) 指定文字以外のカウント 4 2023/05/03 14:37
- C言語・C++・C# C言語の質問です。 以下の命令を実行するプログラムを作りました ①文字列aとbの長さを表示 ②aとb 1 2022/04/29 15:35
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP8を使うと、大量のWarningが...
-
これの対応OSを教えて下さい。p...
-
PHP MySql ページング
-
PHPとHTML+Xamppの掲示板で画像...
-
php 入力画面から確認表示画面...
-
ワードプレスプラグイン MW WP ...
-
csvファイルについて教えて下さ...
-
SFTPなどは使わないホームペー...
-
$_SESSIONについて教えて下さい。
-
$_SESSIONについて教えて下さい。
-
フォームで戻った際に入力済み...
-
グローバルスコープはありますか?
-
書籍よりも より良い htmlspeci...
-
なんでブラウザでPHPを動かすた...
-
phpでcookieがうまく保存されない
-
ワードプレスサイト PHP8.0.25...
-
PHPSpreadsheetを使って関数を...
-
PostgreSQLからCSV形式でエクス...
-
PHPで画像の渡しが上手く行きま...
-
PHP MySql 画像を取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpでcookieがうまく保存されない
-
index.phpに入るには、どうすれ...
-
PHP8を使うと、大量のWarningが...
-
PHPSpreadsheetを使って関数を...
-
重複を防ぐ記述について教えて...
-
index.phpって何ですか? 具体...
-
awsにApacheとPHPを入れて、何...
-
phpでPEAR::DBを使っているので...
-
php 確認表示画面で値をSESSION...
-
PHPでユーザー情報を入力して簡...
-
ワードプレスサイト PHP8.0.25...
-
php 完了画面の送信メールのコ...
-
SFTPなどは使わないホームペー...
-
PHPのセッション有効期限について
-
csvファイルについて教えて下さ...
-
PHPとHTML+Xamppの掲示板で画像...
-
PHPで訪問回数を表示するカウン...
-
ファイルアップロードに関して...
-
掲示板を作成しておりアップロ...
-
Q&Aサイトを作成していてURLの...
おすすめ情報