アフィリエイト広告を利用しています
ファン
検索
<< 2023年10月 >>
1
2 3 4 5 6 7
8
9 10 11 12 13 14
22
23 24 25 26 27 28
29
30 31
最新記事
写真ギャラリー
最新コメント
タグクラウド
カテゴリーアーカイブ
月別アーカイブ
プロフィール
裏目小僧さんの画像
裏目小僧
日別アーカイブ

広告

posted by fanblog

2023年02月25日

UTF8 ShiftJis EUC は先頭バイトだけで文字数が判ると知った

delphiを使ってからLazarusに移行する問題の1つが文字コードです。
(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;

というような内容を文字列変換のページに追記しました
posted by 裏目小僧 at 07:16| Comment(0) | TrackBack(0) | Lazarus
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

この記事へのトラックバックURL
https://fanblogs.jp/tb/11880254

この記事へのトラックバック
×

この広告は30日以上新しい記事の更新がないブログに表示されております。

Build a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: