C 文字列操作 新しいページはコチラ
提供: yonewiki
(→文字列の抽出) |
(→文字列比較) |
||
706行: | 706行: | ||
'''Unicodeの符号化方式UTF-16とは…''' | '''Unicodeの符号化方式UTF-16とは…''' | ||
日本語の範囲ではUTF16は2バイト文字と考えて良いですが、Unicode全体では0x10FFFFまで利用することになっていますので、0x10000以上の値を持つ文字コードは4バイト文字になります。この0x10000以上の値になる場合は、ビット列で表現すると110110????xxxxxx 110111xxxxxxxxxxのような形式になり????の部分のには上位ビットと下位ビットを16ビットずつに分けた時に0xUUUUDDDDと表記するならば、0xUUUUは0x0001~0x0010の値となり得て、そのUUUU-1の値が????に入ります。xの部分には下位DDDDのビット列そのものが | 日本語の範囲ではUTF16は2バイト文字と考えて良いですが、Unicode全体では0x10FFFFまで利用することになっていますので、0x10000以上の値を持つ文字コードは4バイト文字になります。この0x10000以上の値になる場合は、ビット列で表現すると110110????xxxxxx 110111xxxxxxxxxxのような形式になり????の部分のには上位ビットと下位ビットを16ビットずつに分けた時に0xUUUUDDDDと表記するならば、0xUUUUは0x0001~0x0010の値となり得て、そのUUUU-1の値が????に入ります。xの部分には下位DDDDのビット列そのものが | ||
− | 入ったような値になります。そういう意味ではUnicodeのUTF-16という符号化方式では16bit(2byte)だったり32bit(4byte) | + | 入ったような値になります。そういう意味ではUnicodeのUTF-16という符号化方式では16bit(2byte)だったり32bit(4byte)のコードになります。※更に異体字セレクタというコードが付与されるケースがあり、付与される場合はUnicode文字番号つづけて、E0100、E0101、E0102…といった値が付与されます。UTF-16の2バイトコードであれば、さらにDB40 DD00という4バイトが付与され一文字が6文字になります。似ている文字をこのセレクタ番号によって切り替えるという仕組みです。したがって2バイト文字は6バイトに、4バイト文字は8バイトになります。テキストエディタおよびフォントも対応していないと使えないような特殊な文字ですが、存在している以上、対応しなければならない可能性はあります。現状はあまり対応されていないようですが、メモ帳でさえも異体字セレクタに対応しているというのが現実です。 |
'''Unicodeの符号化方式UTF-8とは…''' | '''Unicodeの符号化方式UTF-8とは…''' | ||
713行: | 713行: | ||
x0,x1,x2,x3, x4,x5,x6,x7, x8,x9,xA,xB, xC,xD,xE,xFと表現すると、 | x0,x1,x2,x3, x4,x5,x6,x7, x8,x9,xA,xB, xC,xD,xE,xFと表現すると、 | ||
(1110),(x0,x1,x2,x3),(10,x4,x5),(x6,x7, x8,x9),(10,xA,xB),(xC,xD,xE,xF)となります。 | (1110),(x0,x1,x2,x3),(10,x4,x5),(x6,x7, x8,x9),(10,xA,xB),(xC,xD,xE,xF)となります。 | ||
− | 文字の先頭に3バイトなら3つの1が付き、1バイト目を構成し、 | + | 文字の先頭に3バイトなら3つの1が付き、1バイト目を構成し、 次のバイト以降はバイト先頭に全て10をつける。おかげさまで、1バイト目の下位4bitと、3バイト目の下位4bitの16進数だけはそのままだけど、他のbitは16進表記が、変化します。読み起こすのは大変ですね。文字列の最初を見つけたら、そこから文字列に起こしていけば良いですが、新しい変換表を考えないと直感的にはUnicode文字のコード表には表現できないですね。UTF-8の場合、異体字セレクタはF3 A0 84 80という4バイトが不可されて、3バイト文字は7バイト 4バイト文字は8バイトになります。セレクタがひとつ変化する都度最後の2バイトが80→81→82と変化していきます。 |
=='''文字列区切り文字分割'''== | =='''文字列区切り文字分割'''== |