- - PR -
VBSでEUCコードをSJISコードへ変換したい
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-02-13 18:34
Daisukeさん、
僕も、VB→VBS変換を知らないくせにVBのサンプルを出したのが悪かったです。 ちなみに、 iconv http://www.vector.co.jp/soft/win95/util/se316693.html?site=n を使うというのはだめでしょうか? (VBSのサンプルを探していたら見つけただけですが。。。) iconvの使い方は、ぐぐれば分かるのですが、 http://homepage.mac.com/sdkfz164/terminal/iconv.html とかは、実践的で分かりやすいのではないかと思います。 VB→VBS変換の方法は、引き続き、どなたお願いします。 | ||||||||
|
投稿日時: 2008-02-13 18:44
基本的に手順は単純なので手で組んじゃったほうが早いかも。。。
| 1バイト目から0x80を差し引いたものがJIS漢字の場合: | 1バイト目と2バイト目からともに、0x80を引き、JISコードにした後、 | Shift-JISに変換する。 | 1バイト目が半角カタカナの場合: | 1バイト目をあっさり捨てる。 http://athomejp.com/goldfish/mfc/original/euctosjis.asp | ||||||||
|
投稿日時: 2008-02-14 10:04
どんなコードを書いて、どんなエラーが発生したのでしょうか? エラーになりました、だけでは第三者には状況が伝わらないです。
とりあえず、参考URLのコードを見てみましたが、 VBSに置き換える場合、そのままだとコンパイルエラーになる点は、 ・As 〜で型の指定を行っている箇所 (VBSでは型を指定できないので、As句は省略する必要があります) ・For 〜 NextのNextの後のiの指定 (VBSではこれはできないので省略する必要があります。) ・Do bb = src(ix) と書いてある場所。投稿時のミス?? 後、コンパイルエラーにならないけど、ロジック的にVBSで問題になりそうな箇所。 ・このプログラムではByte型を前提として処理する箇所がたくさんあるのですが、VBSではAs句を指定できない関係上すべてVariant型になります。そのため、いろんな箇所でCByte関数を使って、毎回Byte型に変換しながら処理しないといけないかもしれません。 <追記> このプログラムの内容については深く読み込んでいませんが、 雰囲気的にEUC→JISへの変換を行い、jis2sjという謎の関数で処理をするプログラムっぽいです。 jis2sjはおそらくこの投稿をした人の独自の関数なのでは? </追記> 以下は老婆心ですし、蛇足かもしれませんが。 ところで、このソースコードに書いてある内容は理解できていますか? 私は細かく読んでいませんが、よく理解できないコードを流用するのは非常に危険です。 ・EUCとはどういう文字コードなのか? ・SJISとはどういう文字コードなのか? ・変換するにはどうすべきか?何を気をつけないといけないか? をきちんと理解しないとこのプログラムを流用して作ってもテストできないと思いますので、遠回りでも上記の3点を習得された方がよいと思います。 [ メッセージ編集済み 編集者: よねKEN 編集日時 2008-02-14 10:11 ] | ||||||||
|
投稿日時: 2008-02-19 15:29
説明不足で大変申し訳ございません。
ADODB.Streamを使用してEUCコードをSJISへ変更するという実装方法について質問です。 EUCコードで作成されたファイルをコード変換しSJISコードのファイルに書き換えるということで正しいでしょうか。 @ EUCコードのファイル A スクリプトを実行 B @のファイルをSJISコードのファイルとして作成 上記の実装方法ですとADODB.Streamを使用することができましたが、 スクリプト内で、EUCコードの文字列を変数として受け取り、変換する方法はADODB.Streamでは実装できないのでしょうか。 今回実装したい方法は、 @ EUCコードのファイル(CSVファイル)を読み込む A スクリプト内でEUCコードの文字列を使用して受け取りSJISコードへ変換 (カンマ区切りの文字列を1つずつ変換) A 変換した文字列をファイルへ書き込む 上記のような実装方法はADODB.Streamではできないのでしょうか。 どなたかご存知の方がいたらご教授ください。 | ||||||||
|
投稿日時: 2008-02-19 23:41
変換後のStreamからファイルに保存せず、コード内で文字列として取得できれば良いわけですよね? ADODB.Streamには、確かReadTextという、Stream中のバイナリをStringに変換して取得できるメソッドがあったハズです。 うろ覚えのため引数とか覚えてませんが、とりあえずMSDNか何かでADODB.Streamオブジェクトの仕様を調べてみてはいかがでしょうか。おそらく、目的はこれで達せると思います。 | ||||||||
|
投稿日時: 2008-02-22 15:53
こんな感じかな
Dim SjisStream 'ADODB.Stream Dim Line Set EucStream = CreateObject("ADODB.Stream") EucStream.Charset = "EUC-JP" EucStream.LineSeparator = 10 EucStream.Open Set SjisStream = CreateObject("ADODB.Stream") SjisStream.Charset = "SHIFT_JIS" SjisStream.Open EucStream.LoadFromFile("euc.txt") Do Until EucStream.EOS Line = EucStream.ReadText(-2) 'Lineの処理 SjisStream.WriteText Line,1 Loop EucStream.Close SjisStream.Close Set EucStream = Nothing Set SjisStream = Nothing | ||||||||
|
投稿日時: 2008-02-22 15:55
先頭の
「Dim EucStream 'ADODB.Stream」 が抜けてた。 |