個人ブログのようなものです。とくにジャンルはありません。
広告枠
記事の概要
作成日:2020-08-16
最終更新日:2020-08-16
記事の文字数:2186
文字コードについて
文字コード概要

文字コードに対する基本的なところを勉強中。

基本的な文字コード(文字符号化方式)の一覧は以下の通り。
「文字符号化方式」と「符号化文字集合」の違いは後述。

文字コード名
(文字符号化方式)
符号化文字集合ビット数「a」表現「あ」表現備考
ASCIIASCII8ビット0x61(表現不可)基本となる文字コード。8ビットの内最後の1ビットはパリティビット
JISJIS X 0201
JIS X 0208
JIS X 0211
8ビット
16ビット
24ビット
0x610x2422正式名称は「ISO-2022-JP」
ASCIIコードをベースに日本語を扱えるようにした文字コード
しかし仕様上、ASCII文字と日本語文字が混在するとデータ量が増えるという問題を抱えている
SHIFT-JISJIS X 0201
JIS X 0208
8ビット
16ビット
0x610x82a0JISコードの問題点を解消した文字コード
JISと比較し一部使えない漢字がある
EUC-JPASCII
JIS X 0201
JIS X 0208
8ビット
16ビット
0x610xa4a2UNIX上で日本語を扱えるようにした文字コード
UTF-8Unicode8ビット~0x610xE38182現在の世界的な主流
ASCIIをそのまま置き換えることができる
可変長のビット長で例えば日本語の文字は3~4バイトで表されたりする
UTF-16Unicode16ビット~0x00610x3042UTF-8と同じ符号化文字集合「Unicode」を使う文字符号化方式
サイズの基本単位が16ビット(2バイト)で、「a」なども2バイトで表される。

符号化文字集合と文字符号化方式

文字コードと一言でいうが、実際にはざっくり2つのプロセスを踏まえて文字をビットに置き換えている。

1つ目は、例えば「あ」という文字を「1」という数字に置き換える作業。どの文字をどの数値に置き換えるかの対応表を「符号化文字集合」という。
この符号化文字集合でカバーできない文字がある場合、その文字はその文字コードにおいて使用できないということになる。

2つ目のプロセスは、「1」という数字を実際のビット列に置き換える作業。この時どのようにビット列に置き換えるかの方式を「文字符号化方式」という。
「UTF-8」や「UTF-16」は符号化文字集合こそ同じ「Unicode」を使っているが、符号化方式が異なるため最終的なビット列は異なるものになる。

この「文字符号化方式」を文字コードと呼ぶ(厳密には文字コードという言葉をその2つに紐づけることはできないらしいが、そう考えた方が分かりやすい)

実例

ここで「UTF-8」と「UTF-16」でひらがなの「あ」を符号化する。

【UTF-8の場合】
1.「あ」を「Unicode」に従い、「0x3042」に変換する
 (あ ⇒ 0x3042)

2.「0x3042」を2進数に置き換える
 (0x3042 ⇒ 0011000001000010)

3.下位ビットから6ビットずつセパレートする
 (0011000001000010 ⇒ 0011 000001 000010)

4.各ビット列の頭に「10」を付ける
 (0011 000001 000010 ⇒ 100011 10000001 10000010)

5.先頭のビット列が8桁になるように、頭に「1」埋めをする
 (100011 10000001 10000010 ⇒ 11100011 10000001 10000010)

6.16進数に戻す
 (100011 10000001 10000010 ⇒ 0xE3 0x81 0x82 ⇒ 0xE38182)

【UTF-16の場合】
1.「あ」を「Unicode」に従い、「0x3042」に変換する
 (あ ⇒ 0x3042)

2.2バイト文字はそのまま符号化する
 (0x3042 ⇒ 0x3042)
 (【リトルエンディアンの場合】0x3042 ⇒ 0x4230)

ビッグエンディアンとリトルエンディアン

「UTF」系列の文字コードでは、同じ文字コードでも「ビッグエンディアン」「リトルエンディアン」という区別を持つ。
違うのはビット列(バイト)の並び順。

例えばUTF-16だと「あ」は「0x3042」と表されるが、これを後ろのバイトから並べ直す、つまり「30」と「42」をひっくり返すと「0x4230」というビット列になる。
このひっくり返したものが「リトルエンディアン」で、ひっくり返す前のものが「ビッグエンディアン」になる。

2つをデータ上で区別する方法だが、テキストデータの先頭に特定のビット列を付与することで行う。もしくは文字コードで元からどちらを使用するかを区別するようにもできる。

このテキストデータの先頭に付与したビット列を「BOM」(Byte Order Mark)と言う。

文字コードエンディアンBOMの有無BOM
UTF-8ビッグ省略可能0xEFBBBF
UTF-8Nビッグ無し
UTF-16ビッグ省略可能0xFEFF
UTF-16リトル省略可能(非推奨)0xFFFE
UTF-16BEビッグ無し
UTF-16LEリトル無し
UTF-32ビッグ省略可能0x0000FEFF
UTF-32リトル省略可能(非推奨)0xFFFE0000
UTF-32BEビッグ無し
UTF-32LEリトル無し

広告枠
関連ページ
SNSツイート一元化対応(Twitter・Misskey・Mastodon・Bluesky)-Python
概要 概要 SNSのツイートを一元化する際の備忘録というかPythonコードの共有です。 それぞれ…
Windows-PowerShellを使用してのフォルダ内のファイル名を連番にリネームする
以下PowerShellコードを実行することで、フォルダ内のすべてのファイルのファイル名を「0001…
SCSSとやらでメディアクエリと疑似要素の組み合わせに小一時間苦戦したという話
SCSSとやらでメディアクエリと疑似要素の組み合わせに小一時間苦戦したという話 当然ですが本サイト…
ボタンを押す演出でCSSのtranslateYやtopを使用することの問題
ボタンを押す演出でCSSのtranslateYやtopを使用することの問題…
東京03のyoutubeチャンネルの概要ページの挙動がおかしい
東京03のyoutubeチャンネルの概要ページの挙動がおかしい…
Youtube Data APIでハンドルIDからユーザ情報を取得できない
Youtube Data APIでハンドルIDからユーザ情報を取得できない問題 結論から言うと現在…
ウマ娘まとめサイト(InoReader)
ウマ娘まとめサイト(InoReader)…
ウマ娘まとめサイト(Feedly)
ウマ娘まとめサイト(Feedly)…
Pythonを使ってinoreaderでサイトの更新情報を取得してみた
inoreader(イノリーダー?)が公開しているWeb APIを使用して、Pythonで自動的にサ…
Pythonを使ってFeedlyでサイトの更新情報を取得してみた
Pythonを使ってFeedlyでサイトの更新情報を取得してみた…
関連タグ
情報技術
管理人ツイート
最新ページ
怖い話まとめ
最初に 怪談系の怖い話を載せています。 特に設定部分は人の手が入ってますが、生成AI(ChatGP…
VRoidを使う前に絶対に表情はいじった方が良いと思うという話
デフォルトのVRoidの表情はすごいVRoidっぽい VRoidStudioでは「楽しい」「悲しい…
Twitter:【日替わり】一問一答自己紹介テーマ
Twitter:【日替わり】一問一答自己紹介テーマ 日替わりで簡単な質問が表示されます。 毎日つぶ…
アークナイツ-2024大感謝祭・秋商品-理性換算
概要 "2024大感謝祭・秋でお得な商品はどれか"というのを理性に換算して一覧化したものとなります…
本サイトについて
本サイトの概要 個人ブログのようなものです。とくにジャンルはありません。 本サイト内の情報について…
制作物一覧
以下に移動しました こちらに移動しました。 …
SNSツイート一元化対応(Twitter・Misskey・Mastodon・Bluesky)-Python
概要 概要 SNSのツイートを一元化する際の備忘録というかPythonコードの共有です。 それぞれ…
NovelAI R18イラスト集
概要 『NovelAI』で作成したR18イラストの寄せ集めです。 全81枚。 R18なので満18歳…
NovelAI イラスト集
概要 『NovelAI』で作成したイラストの寄せ集めです。 別で失敗集も上げていますが、こちらはそ…
Windows-PowerShellを使用してのフォルダ内のファイル名を連番にリネームする
以下PowerShellコードを実行することで、フォルダ内のすべてのファイルのファイル名を「0001…
コメントログ
コメント投稿




本サイトのタグ一覧
タグを表示する NovelAIR18VRoidWebサイト作成Webツールアークナイツアークナイツ-ステージ攻略日記アズールレーンアズールレーン-日記ウマ娘ギャラリーゲームデビラビローグホラーポケットタウン気ままな日記情報技術情報技術-WebAPI知的財産権統合戦略白夜極光本サイトについて魔王スライム様がんばる!漫画
広告枠