掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
文字コードを判別するには (ID:3458)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
BIG5やGB、EUC-KRなどの判定方法はわかりません。 僕も知りたいです。 以下はSJIS,JIS,EUCの場合です。 SJISの場合、 c1 := 2バイト文字の第1バイト; c2 := 2バイト文字の第2バイト; isknj1 := ((c1>=$81) and (c1<=$9F))||((c1>=$ED) and (c1<=$FC)); //第1バイトチェック isknj2 := ((c2>=$40) and (c2<=$FC) and (c2<>$7F)); //第2バイトチェック で、isknj1 and isknj2のとき、SJISの2バイト文字です。このほかにASCII文字の判別が必要です(要は半角文字の判別です)。 JIS これは面倒です。これがわかるとEUCもわかります。 JISは、エスケープ文字(ESC=文字コード$1B)により文字の種類が変わります。 最初はASCIIとして処理されますが、たとえば ESC + '$' + '@' もしくは ESC + '$' + 'B' の時、次の文字から2バイト文字です。 ESC + '(' + 'H' もしくは ESC + '(' + 'J' のとき、次の文字からASCII文字です ASCIIのときは、$20-$7Eまでの文字をそのまま使います。 2バイト文字では、次のような操作が必要です。 c1 := 2バイト文字の第1バイト; c2 := 2バイト文字の第2バイト; if (c1 and 1)=1 then begin if c2 < $60 then c2 := c2 + $1F else c2 := c2 + $20; end else begin if c1 < $5F then c1 = (c1 + $E1) shr 1 else c1 = (c1 + $161) shr 1; end; EUCは、JISの2バイト文字に当たる部分の、各バイトの最上位ビットが立っています。このため、ESCによる文字の種類分けが必要ありません。 たとえば、 ABCあいうDEF は、 JIS: 41 42 43 1B 24 42 24 22 24 24 24 26 1B 28 42 44 45 46 EUC: 41 42 43 A4 A2 A4 A4 A4 A6 44 45 46 となり、ESC+'$B' (1B 24 42)や、ESC+'(B' (1B 28 42)の分だけEUCの方が短くなります。 SJISとEUCは、区別することができません。 EUCの「あいう」は、EUCでは "、「、、、ヲ" の半角カタカナに当たります。 判別の順序としては、 ASCII, JIS, SJIS/EUCで、SJISとEUCはどちらを優先するかによって、決定するほかありません。 # 内容によっては、SJISのみ、EUCのみに判定されることもありますが、その場合は期待通りの判別になります
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.