RFC3629でUTF-8のバイト範囲が変更されている

最新のUTF-8では5〜6バイトの表現がすべて不正になったんですね
知らなかった…(ぉぃ
最新と言っても RFC3629 って2003年?ずいぶん前だな
他にもコマゴマと範囲が変わったみたい

RFC2279(旧)

1バイト 2バイト 3バイト 4バイト 5バイト 6バイト
UTF8-1 0x00 〜 0x7F - - - - -
UTF8-2*1 0xC0 〜 0xDF UTF8-tail - - - -
UTF8-3*2 0xE0 〜 0xEF UTF8-tail UTF8-tail - - -
UTF8-4*3 0xF0 〜 0xF7 UTF8-tail UTF8-tail UTF8-tail - -
UTF8-5*4 0xF8 〜 0xFB UTF8-tail UTF8-tail UTF8-tail UTF8-tail -
UTF8-6*5 0xFC 〜 0xFD UTF8-tail UTF8-tail UTF8-tail UTF8-tail UTF8-tail
  1. UTF8-tail は「0x80 〜 0xBF」
  2. RFC 2279 - UTF-8, a transformation format of ISO 10646

RFC3629(現)

1バイト 2バイト 3バイト 4バイト
UTF8-1 0x00 〜 0x7F - - -
UTF8-2*6 0xC2 〜 0xDF UTF8-tail - -
UTF8-3 0xE0 0xA0 〜 0xBF UTF8-tail -
= 0xE1 〜 0xEC UTF8-tail UTF8-tail -
= 0xED 0x80 〜 0x9F UTF8-tail -
= 0xEE 〜 0xEF UTF8-tail UTF8-tail -
UTF8-4 0xF0 0x90 〜 0xBF UTF8-tail UTF8-tail
= 0xF1 〜 0xF3 UTF8-tail UTF8-tail UTF8-tail
= 0xF4 0x80 〜 0x8F UTF8-tail UTF8-tail
  1. UTF8-tail は「0x80 〜 0xBF」
  2. 5〜6バイト表現は全て撤廃
  3. RFC 3629 - UTF-8, a transformation format of ISO 10646


このチェックロジック作るの面倒だなァ〜…

参照

*1:0xC081 〜 0xC1BF は使用禁止

*2:0xE08080 〜 0xE09FBF は使用禁止

*3:0xF0808080 〜 0xF08FBFBF は使用禁止

*4:0xF880808080 〜 0xF887808080 は使用禁止

*5:0xFC8080808080 〜 0xFC8380808080 は使用禁止

*6:0xC081 〜 0xC1BF は使用禁止