【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
Windows TIPS
[Scripting]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

ファイルの文字コードを変換する

解説をスキップして操作方法を読む

山田 祥寛
2003/07/19
 
対象OS
Windows NT
Windows 2000
Windows XP
Windows Server 2003
指定されたフォルダの下に存在するテキスト・ファイルの文字コードを一括で変換したいことがある。
このためには、文字コード変換用のコンポーネットをWSHから呼び出せばよい。
 
解説

 Windows OSや、UNIX/Linuxなど、マルチプラットフォーム環境で作業を行っている場合、文字コードの差異に悩まされる状況は少なくない。例えば、Windows環境で作成したソース・コードをUNIX/Linux環境で動作させるようなケースでは、いちいちShift_JISで記述したコードをEUC-JPに変換するなどの必要がある。

 しかし本サンプルを用いることで、特定のフォルダ配下に納められたテキスト・ファイルの文字コードを一括で変換することができる。フォルダ配下のサブフォルダまで再帰的に処理されるため、対象ファイルの指定もシンプルだ。あるプロジェクトに属するファイル一式を、一気に変換したいという場合などに威力を発揮するだろう。

 なお本TIPSを利用するには、Basp21という、メール送信/コード変換用の追加コンポーネントがコンピュータにインストールされていることが条件となる。コンポーネントBasp21に関する入手先やインストール方法などについては、別稿の「TIPS―配信リストを使ってメールをいっせいに配信する」の「手順1」を参照してほしい。


操作方法

手順1―テキスト・エディタでスクリプトのコードを入力する

 まずはテキスト・エディタ(メモ帳でもなんでもよい)を開き、以下のコードを入力して欲しい。なお、引用符(')で始まる行はコードの概要を解説するためのコメント部分なので、省略してもかまわない。

<?xml version="1.0" encoding="Shift_JIS" standalone="yes" ?>
<package>
<job id="KConvert">
<?job error="True" debug="True" ?>
<object id="objBsp" progid="Basp21" />
<object id="objFs"  progid="Scripting.FileSystemObject" />
<script language="VBScript">
<![CDATA[
Sub FileConvert(strPath)
  Set objFld = objFs.GetFolder(strPath)
  For Each objFl In objFld.Files
    strTmp=objFl.Path
    If objFl.Size>0 Then objBsp.KconvFile strTmp,strTmp & ".tmp",2,1
    objFl.Delete
    objFs.MoveFile strTmp & ".tmp",strTmp
  Next
  ' 現在のフォルダ配下に存在するファイル(objFld.Files)に対して、文字コード
  ' の変換処理(Basp21#KconvFilesメソッド)を行う。ただし、対象のファイル
  ' が空(0バイト)の場合には、KconvFileメソッドは失敗するので、あらかじめ
  ' 取り除いておくものとする。
  ' 変換後は元のファイルを削除し、KconvFileメソッドによって生成された「元の
  ' ファイル名.tmp」を元のファイル名で保存し直す
  For Each objSub In objFld.SubFolders
    FileConvert objSub.Path
  Next
  ' 現在のフォルダ配下に存在するサブフォルダ(objFld.SubFolders)に対して
  ' 再帰的にFileConvertプロシージャ(自分自身)を呼び出す。これによって、
  ' 複数の階層フォルダに対しても、一度で変換処理が行える
End Sub
FileConvert WScript.Arguments.Item(0)
  ' 上で定義されたFileConvertプロシージャに、ドラッグ&ドロップで渡された
  ' フォルダのパスを引数として渡し、実行する
]]>
</script>
</job>
</package>

 WSHの実行ファイルは拡張子「.wsf」(Windows Scripting host File)とする必要がある。ファイル名自体は何でもよいが、ここでは「kconv.wsf」という名前で保存しておく。

手順2―WSHのコードを実行する

 kconv.wsfを実行するには、エクスプローラでkconv.wsfの格納されたフォルダを開いておき、そのアイコン上に置き換え対象のファイルが納められた「フォルダ」をドラッグ&ドロップするだけだ。だがこのkconv.wsfは複数フォルダの変換には対応していないので、複数フォルダを指定した場合には、最初のフォルダだけが処理される。注意してほしい。

 本稿の例では、フォルダ中に含まれるすべてのファイルがShift_JISコードからEUC-JPコードに変換される。ファイルの文字コードを変換するKconvFile関数は次のようにして利用する。

objBsp.KconvFile(元のファイル名,変換後のファイル名,変換後の文字コード,変換前の文字コード)

 第1、第2引数には変換するファイル名を指定し、第3、第4引数には文字コードを指定する。指定できる文字コード(の数値)は以下の通りである。

文字コード
0
任意(変換前)、変換せず(変換後)
1
SHIFT_JIS
2
EUC-JP
3
JIS
4
UNICODE UCS-2
5
UNICODE UTF-8
KconvFileメソッドにおける文字コード指定
変換前の文字コードを第4引数に、変換後の文字コードを第3引数にそれぞれ指定する。

 第4引数に0を指定した場合には、変換前の文字コードは自動判定されるが、「Shift_JISで半角カナのみ」「漢字の数が少ない」「UTF-8」の場合などに文字コードの自動認識に失敗する場合があるので、可能な限り明示的に与えることが好ましい。

 なお本稿では割愛するが、例えば「TIPS―複数ファイルの文字列置換をワンクリックで行う」と併用することで、より強力な変換スクリプトの可能性が見えてくる。また、ちょっとした変更で複数フォルダへの対応も可能だろう。

 まだまだ応用の可能性はあるので、次の機会にはさらに活用してみたい。どうぞお楽しみに。End of Article

この記事と関連性の高い別のWindows TIPS
スクリプトレット・コンポーネントでリソース情報を定義する
PowerShellで複数のファイルの文字コードを一括変換する
文字コードを変換する
PowerShellで複数のファイルの文字列を一括置換する
WSHスクリプトでヘルプ・メッセージを表示する
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「Windows TIPS」

ホワイトペーパーTechTargetジャパン

Windows Server Insider フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  TomcatやJBossなどAPサーバ環境に関する
情報を集約! “業務”用APサーバ大百科

New!
  一気に解説! 最新のクラスタストレージ
「RAIDを超えたストレージ基準」……など

New!
  クラウド的ユーザー体験の変化は脅威か?
仮想化技術を使いこなす運用管理術を紹介

New!

  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?