掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
EUCコードからShift-JISコードに変換するには? (ID:53260)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> EUC -> SJIS は大抵、変換テーブルを用意してコンバートする事が多いです。 そんなことをするのはメモリの無駄遣いになることが多いです。 そもそも,どちらもJIS X 0208の文字の順序を変換せずに使っているので, 計算だけで処理することができます。 ちなみに,アセンブラで昔書いたコードを引っぱり出すと, and ax, 7F7FH shr ah, 1 jc L1 add al, 5EH dec ah L1: sub al, 60H sbb al, 0 sub ah, 2FH jc L2 add ah, 40H L2: add ah, 0A0H add al, 80H でAXレジスタの値がEUC-JPのJIS X 0208の文字の値からShift_JISのJIS X 0208の値に変換されます。 > _mbcjistojms() は JIS→SJISですよね? >> JIS X 0208の文字と0x7F7Fの論理積を与えれば,Shift JISでのJIS X 0208の文字に変換されます。 > この二つの情報で、どうやってEUC→SJISが実現出来るのかイマイチ理解出来ませんでした。 EUC-JPの仕組みを知れば簡単だと思いますが……。 まず,EUC-JPはISO/IEC 2022の8bit系の枠組みを利用しています。 そして,C0とC1にISO/IEC 6429を, G0にUS-ASCII(or ISO/IEC 646国際基準版)を,G1にJIS X 0208を,G2にJIS X 0201の片仮名用図形文字集合を,G3にJIS X 0212を, それぞれ呼び出した状態にあり,さらに CLにはC0が,CRにはC1が,GLにはG0が,GRにはG1が, それぞれ指示されている状態が暗黙に指示されています。 そして,G2とG3はシングルシフトを使って利用し,エスケープシーケンス及びロッキングシフトは利用しません。 以上がEUC-JPの基本的な仕組みです。 そして,JIS X 0208の文字はGRにあるので,10/01〜15/14の範囲のコードになります。 また,_mbcjistojmsはGLにあるJIS X 0208の文字を変換します。 GRの文字というのは,GLの文字の各バイトと128の論理和になるので, 0x7F7Fとの論理積をとることによってGRの文字をGLの文字のごとく扱えます。 あとは,このコードを_mbcjistojmsにかければShift_JISにおけるコードなる,というものです。 ところで,「JIS」というエンコーディングは存在しません。 #JISに定められた,というのであれば複数存在する。 文字コードを扱うのですから,紛れのない表現を使って下さい。 参考資料) 文字コードの話 (euc.JP内) http://euc.jp/i18n/charcode 日本語と文字コード (The Web KANZAKI内) http://kanzaki.com/docs/jcode CHARACTER SETS (IANA内) http://www.iana.org/assignments/character-sets
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.