#❏文字コードについて
文字(記号)に対して、コンピュータ上でデータとして扱うために、
一文字ずつ固有の識別番号を付与したもの。
その数値と文字の対応関係を定めた規約のこと。
文字コードは以下の2要素からできている。
- 文字集合:どの文字を対象とするかの一覧
- 符号化方式:文字と数値のマッピング表
#❏符号化方式
文字と数字を対応させるために、まず「どの文字を対象とするか」その一覧を作成する必要がある。
欧米兼であればアルファベットと特定の記号で一覧化が容易であるが、
漢字なども入れるとなるとどこまで入れるのかが焦点となる。
また、それらをどのようなビット列(数値化)として定義するのかにも、現状様々な方式がある
#❏代表的な符号化方式
###◆ASCIIコード
最も基礎となる文字コード。
数字・アルファベット・記号をそれぞれ1バイトで表現する。
###◆Shift-JIS
Windows基本の文字コード
日本語表記でWindowsを使用する場合はこの文字コードが使用される
ASCIIコードに加えて日本語の文字を加えている。
半角カタカナは1バイト起票でそれ以外の全角文字が2バイトでマッピングされている
###◆UTF-8
ASCIIコードの文字に加え、世界中の文字を加えたのが、UTF-8
文字集合としてはunicodeを使用。
世界中の多くのソフトウェアはUTF-8に対応している。
#❏よくはまる例
###◆文字化け
データの転送の際に、対応する文字コードが異なることによって発生する。
コード変換に失敗した文字は「?」「■」となって置き換えられる。
原因は文字集合にあり、特に Shift-JISと、UTF-8の相互変換で発生しやすい。
Shift-JISで定めている難しい漢字「彅」(環境依存文字)は
UTF-8の文字集合に登録されていないため文字化けが発生する。
###◆改行コード
eclipse:windows でコードを修正し、PRを作成したら全行修正しているように見える
なんてことは改行コードが関係している。
改行コードは文字コードに対して、改行を識別するための定義である。
Windows:0x0d0a
ASCII の制御文字 CR (キャリッジリターン), 0x0a は同じく制御文字の LF (ラインフィード) で判別している
→「CRLF」と呼ばれている
Linux:0x0a
ASCII の制御文字 LF (ラインフィード) のみで改行とみなす。
→「LF」もしくは「LF only」と表現される
window環境では「CRLF」、Linux/Macintoshでは「LF」となるアプリケーションが多いので、
Linuxのファイルをwindowsで開こうとすると改行がされていなかったり
その逆で、上述した「PR上ですべて変更されているように見える」といった事象が発生する。
ただ、改行コードはアプリケーションごとに決定できるので、変換方法を変えてあげれば解決できる。
Eclipseの場合は以下
https://qiita.com/ponsuke0531/items/74833b2d7bd4bbf44057
#❏派生:URLエンコード
目的・必要性
URLに含むことが禁止されている文字があるため、それを形式に沿うよう変換すること
具体例
- 半角→ %〇〇
- 全角→ %〇〇が二つ分
- 半角スペース→ +
エンコーディング規約
- RFC3896
エンコード方式
- (ほとんど)UTF-8
#❏参考資料