(delphiはUTF16文字になってから移行しないままなので)
自作のツール類はShiftJISを想定しています。それらを移植しなけばいけません。
ちょっとしたコントロールも数値入力とかで四則演算出来るように作ったりしてる為です。
それで興味のなかった文字コードを調べていたわけですが
日本語で使われる UTF8 ShiftJis EUC は文字を順に読んで、そのも文字コードから1文字のバイト数が判るようになっていると知りました。
ShiftJis は当然最大2文字なので簡単 EUCは3バイトになる先行コードは1つだけ
そして UTF8も最初のバイトを見れば残り何バイトが必要かが判ります。
文字列処理といっても多くの場合、多バイト文字の中身は関係なく、多バイト文字である事が判れば十分です。
したがって、この3つは統一して処理出来そうです。
ShiftJisは
OEMLeadBytes = [#$81..#$9F, #$E0..#$FC];
if c in OEMLeadBytes then 2byte else 1byte;
EUC-jpは
EUCLeadBytes = [#$8E,#$8F,#$A1..#$FE];
EUCLeadBytes3 = [#$8F]; //先頭文字が8Fなら合計3byte
if c in EUCLeadBytes then begin
if c in EUCLeadBytes3 then 3byte else 2byte;
end else 1byte
UTF8は
UTF8LeadBytes = [#$C2..#$DF, #$E0..#$EF, #$F0..#$F4];
UTF8LeadBytes2 = [#$C2..#$DF];
UTF8LeadBytes3 = [#$E0..#$EF];
UTF8LeadBytes4 = [#$F0..#$F4];
if c in UTF8LeadBytes then begin
if c in UTF8LeadBytes2 then 2byte
else
if c in UTF8LeadBytes3 then 3byte
else
if c in UTF8LeadBytes3 then 4byte;
end;
というような内容を文字列変換のページに追記しました
【このカテゴリーの最新記事】
- no image
- no image
- no image
- no image