シフトJISからUTF-16へ変換

VB6,VBA,VBS,EXCEL,DOS,BAT,WSH,WORDの小技メモ

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ 燈明日記/ Perlノート/ 漢字起源/ yahoo

はじめに

本ページは、ウインドウズ系全般のティプスメモです。

そう、はじめはVB系のティプスメモだったのですが…いつの間にか、ウインドウズ系全般のティプスメモになってしまいました。

ちなみに、ティプス(Tips)とは、マニュアルに書かれていない技法や裏わざのことですが、本ページでは、私が経験してこれはと思ったノウハウのメモになっています。

尚、以下は本サイトの最新情報(ブログ)です。

それでは、本ページが何かのお役に立てれば幸いです。ごゆっくりご覧ください。

2008-11-27 シフトJISからUTF-16へ変換

VBScriptでシフトJISからUTF-16への変換ルーチンを組んでみました。


◆ソース(sj2utf.vbs)
Call FromTo("sj.txt", "shift_jis", "utf16.txt", "utf-16")
'FromToサブの第4引数を以下を参照して替える
'BOM付きビックエディアン unicodeFEFF
'BOM無しビックエディアン utf-16be
'BOM無しリトルエディアン 不明
'BOM付きリトルエディアン unicode, unicodeFFFE, utf-16, utf-16le, 

Public Sub FromTo(inFileName, inCharset, outFileName, outCharset)
Const adSaveCreateOverWrite = 2
Dim inStream
Dim outStream

    Set inStream = CreateObject("ADODB.Stream")
    inStream.Charset = inCharset
    inStream.Open

    Set outStream = CreateObject("ADODB.Stream")
    outStream.Charset = outCharset
    outStream.Open

    inStream.LoadFromFile inFileName
    inStream.CopyTo outStream
    outStream.SaveToFile outFileName, adSaveCreateOverWrite

    outStream.Close
    inStream.Close
    Set outStream = Nothing
    Set inStream = Nothing
End Sub
◆実行方法

sj2utf.vbsとsj.txt(シフトJISのコードのデータ)を同じフォルダにして以下のコマンドを実行。または、単にsj2utf.vbsをダブルクリックする。

C:\wk>CScript sj2utf.vbs

◆補足

FromToサブの第4引数は、レジストリの以下に登録されているものとのことですが、それ以外にもあるようです。

HKEY_CLASSES_ROOT\MIME\Database\Charset

また、『BOM無しリトルエディアン』の指定の方法が不明です。

ちなみに、PerlのEncodeでは、『BOM付きリトルエディアン』の指定の方法が不明だったのですが・・・。


◆蛇足

Perlと同じように標準入出力でプログラムを組みたかったのですが、VBScriptではバイナリデータを標準出力することが出来ないみたいです(テキストなら出来る)。

また、直接的な変換関数もなく、Asc,Hex,Valを組み合わせば出来そうなのですが・・・出来なかったです。

そこで、標準入出力と独自変換はあきらめ、ファイル指定の入出力とADODB.Streamの変換を使ってみました。

ADODB.Streamでのコード変換は、VBScriptでの定石のようです。

おわりに

以下のページには、すべてのTIPSがあります。もしよろしければ、どうぞ!

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくVB-TIPS掲示板へご指摘ください。