2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Linux基礎(文字コードについて)

Posted at

文字コード

文字コードとは、コンピュータ上で文字を利用するために各文字に割り当てたバイトコードのこと。

文字コード 説明
ASCII 7ビットで表現される。128種類の英数字、記号、制御コードで構成される。
Unicode 32ビットで表現される。1つの文字コード体系で多言語処理を可能にするための文字コード
UTF-8 Unicodeを使用した文字コード。1文字を1バイトから6バイトで表示する。
EUC-JP UNIX環境で標準的に使用していた日本語の文字コード
Shift-JIS WindowsやMacOSで使用される日本語の文字コード
ISO-2022-JP 電子メールなどでよく使用される日本語の文字コード(JISコード)
ISO-8859 ASCIIを拡張した8ビットの文字コードで256種類の文字を表現できる。

多くのディストリビューションでは、文字コードとしてUTF-8を使用している。日本ではいくつかの文字コードが混在しているのでWindowsで作成したファイルをLinuxで開くと文字化けすることがある。また、ディストリビューションによってはUTF-8以外の文字コードを使用しているものもあり、文字コードを変換させる必要がある。

文字コード変換コマンド
iconv [オプション] [ファイル名]

オプション 説明
-l 変換できる文字コードの一覧を表示
-f 入力文字コード 変換元の文字コード。from
-t 出力文字コード 変換後の文字コード。to
-o ファイル名 文字コードを変換した文字列を出力するファイル名
# EUC-JP で作成された「test.txt」を、UTF-8に変換してファイルを「text_v2.txt」として保存
$ iconv -f eucjp -t utf8 test.txt > text_v2.txt

文字コードの詳細の話

ASCIIというコードが、7ビットの1バイト弱で表現されるシンプルな仕様。アメリカで標準化された規格であり、英語に使われる文字しか入っていない。つまり、漢字を使う日本やアルファベットにアクセント記号をつける欧州の言語には適さない。かつ漢字のように何千文字もあるような文字体系は、1バイトのコードではどうしても網羅することが不可能。

漢字に対応するためには、2バイトコードの開発が不可欠だった。1バイトでは256文字しか入らないが、2バイトであれば、65,536文字まで入る。ただ、2バイトコード開発には、プログラムのコンパイラやインタプリタなどは、相変わらずASCIIをベースとして動くわけなので、過去の資産との互換性も求められた。

そこで、1バイトコードと2バイトコードを組み合わせる技法が開発された。よく知られているShift_JISやEUCといったコードはそうしたものの一種。

文字コード 方式
Shift_JIS 「日本の1バイトコードJIS×0201」と「2バイト漢字コードJIS×0208」とを組み合わせて運用する方式
EUC 「ASCII」とJIS×0208を組み合わせて運用する方式

更に、情報通信技術が発達して国際的な活動が増えたことにより、国や地域別に作られていた文字コードをまとめて国際的な統一文字コードを作ろうということになった。
そこで開発された国際文字コードが「ISO/IEC 10646」、一般的には「Unicode」として知られる。Linuxのディストリビューションでもデフォルトの文字コードとして利用されている。

もっと深掘りしていく予定

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?