しょぼいマシンで自作プログラミング言語を作ってみる (9)
文字コード解析について
UTF-8もサポート対象に
コメントとか出力文字について、日本語などのマルチバイト文字を表示させたいので、UTF-8についてもサポートするようにします。
UTF-8は1バイトから4バイトの長さでエンコードされています。
あらためて、ざっくりとUTF-8についておさらいしますと?
1バイト文字(UnicodeコードポイントU+0000からU+007F)は該当の文字の最上位ビットが0となってます。0x00から0x7fの範囲に収まっています。
2バイト文字(UnicodeコードポイントU+0080からU+07FF)は該当の文字について、1バイト目の上位3ビットが110、2バイト目の上位2ビットが10となっています。0xc080から0xdfbfの範囲に収まっています。
3バイト文字(UnicodeコードポイントU+0800からU+7FFF)は該当の文字について、1バイト目の上位4ビットが1110、2バイト目から3バイト目の上位2ビットが10となっています。0xe0a080から0xefbfbfの範囲に収まっています。
4バイト文字(UnicodeコードポイントU+0800からU+7FFF)は該当の文字について、1バイト目の上位5ビットが11110、2バイト目から4バイト目の上位2ビットが10となっています。0xf0908080から0xf48fbfbfの範囲に収まっています。
ということで、文字列を1バイトずつ走査して、その様になっているかどうかを判定して、入力された文字バッファの最後まで行ったらUTF-8であるという認定をするようにしました。
とりあえず、今回もかなり短いですが、ここで終えます。