お世話になります。
Jisコード から Shift-JISへ相互変換したいのですが、
どの様にすればよいのでしょうか?
API関数などはないのでしょうか?
http://www.unixuser.org/~euske/doc/kanjicode/
ここが参考になります。
ここをみながら作れば相互変換プログラムを作れます。
実はぼくも先週やろうと思っていて、少し作りました。
エスケープシーケンス処理の部分の作りこみがまだなので、
まだ、公開するのはやめておこうと思いますが。
APIは…知りません。あるかもしれませんが。
DLLだったらあると思います。
でも、是非作りこみをしてほしいですね。
最初は難しく感じると思いますが、
でも、作ってしまうと意外と簡単ですよ。
アルゴリズムの勉強にもなりますし。
では。
VB6の場合は、ADODB.Streamオブジェクトを利用できます。(Charsetプロパティ)
Shift_JIS と JIS(iso-2022-jp) の変換だけではなく、
EUC-JP や UTF-8 など、各種文字コードの変換が可能ですよ。
例えば、VB6の場合は、[AcitveX Data Objects]のVer 2.5以上を参照設定して、
Dim Stm As ADODB.Stream
'JISコードのストリームを作成
Set Stm = New ADODB.Stream
Stm.Open
Stm.Type = adTypeText
Stm.Charset = "iso-2022-jp" 'あるいは"Shift_JIS"や"EUC-JP"とか
'文字列を格納
Stm.WriteText "弁士"
'JISコードのバイナリとして取得
Dim B() As Byte
Stm.Position = 0
B = Stm.ReadText()
'ストリームの破棄
Stm.Close
Set Stm = Nothing
という感じです。メモリ上で変換するだけではなく、
ファイルからの読み込み、あるいはファイルへの書き出しもできます。
また、.NETの場合は、System.Text.Encodingクラスを使う事ができます。
(こちらは、SDKに使用例があるので、そちらを参考にして下さい)
なお、APIで処理するならば、mlang.dll を利用できます。
関数名でいえば、ConvertINetUnicodeToMultiByte とか、
ConvertINetString とか、ConvertINetMultiByteToUnicode ですね。
あるいは、kernel32.dll に含まれる、WideCharToMultiByte APIや
MultiByteToWideChar APIを使うこともできるでしょう。
訂正……。
> 'JISコードのバイナリとして取得
> Dim B() As Byte
> Stm.Position = 0
> B = Stm.ReadText()
上記は、
'JISコードのバイナリとして取得
Dim B() As Byte
Stm.Position = 0
Stm.Type = adTypeBinary
B = Stm.Read()
として下さい。m(_ _)m
なお上記のサンプル(String→コード変換したバイト配列)とは逆に、
バイナリ(バイト配列)→Stringへの変換を行いたい場合には、
Set Stm = New ADODB.Stream
Stm.Open
Stm.Type = adTypeBinary
Stm.Write B 'ストリームに、バイトデータを書き込む
Stm.Position = 0
Stm.Type = adTypeText
Stm.Charset = "iso-2022-jp" 'バイトデータの文字コードを指定
S = Stm.ReadText() 'String型のデータとして取り出す
のようにすればOKです。
すげー…
魔界の仮面弁士さん、さすがですね。
知っている者と知らない者の力の差が歴然です…
失礼しました。