SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【文字コード】JISで1文字が8バイトになる?

JISコード(ISO-2022-JP)は、1つの文書ファイルの中に、JIS X 0208がASCIIやJIS X 0201と共存できる仕組みを取り入れたものです。その仕組みの基本となっているのが「エスケープ・シーケンス」と呼ばれる制御コードで、文字コードが変化する位置を示すというものです。

16進数で「1B、24、42」の文字コードが登場すると、ここからJISのしるし。16進数で「1B、28、42」の文字コードが登場すると、JISから復帰のしるし。

「あ」の1文字をJISで保存すると、ファイルの容量はエスケープシーケンスの3バイト+文字本体の2バイト+エスケープシーケンスの3バイト=8バイト。

「あい」の2文字をJISで保存すると、ファイルの容量はエスケープシーケンスの3バイト+「あ」2バイト+「い」2バイト+エスケープシーケンスの3バイト=10バイト。

「あaい」の3文字をJISで保存すると、ファイルの容量はエスケープシーケンス3バイト+「あ」2バイト+ASCIIに戻るためのエスケープシーケンス3バイト+「a」1バイト+エスケープシーケンス3バイト+「い」2バイト+ASCIIに戻るためのエスケープシーケンス3バイト=17バイト。

まとめ

文字の切り替えのたびにエスケープシーケンスが入るので、単純に1文字2バイト×文字数という計算ができない。

マルチバイト文字1文字をJISであらわすとき、エスケープシーケンスを前後につくと、見た目には1文字だが、全体で8バイトになる。

関連するメモ

コメント