WinMergeでテキストファイルの比較をする際、文字コードを
直指定することで文字化けせずに表示することが可能だが
http://d.hatena.ne.jp/nakapon/20170315
WinMergeには文字コードをチェックして自動表示する機能はなく
また起動時オプションで事前に文字コードを指定することもできない
自分が使用するのは今のところSJIS、UTF-8、UTF-16LE(BOMなし)だけ
しかもUTF-16LEは今のところResourceHackerの
リソースファイル(.rc)のみでしか使用しない
WinMergeが自動判定しないのなら自前で切換できないかと調査
WinMergeの文字コードは例によってレジストリに保存されていた
場所はHKEY_CURRENT_USER\SOFTWARE\Thingamahoochie\WinMerge\Settingsの
CodepageDefaultCustomValue
なのでレジストリファイルをあらかじめ用意し、WinMergeの
起動前に文字コードを拡張子から判定しレジストリを
取り込むことで対応することに
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\SOFTWARE\Thingamahoochie\WinMerge\Settings] "CodepageDefaultCustomValue"=dword:000004b0
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\SOFTWARE\Thingamahoochie\WinMerge\Settings] "CodepageDefaultCustomValue"=dword:0000fde9
//!*script // WinMarge起動 Ver 3.0 // 使用エイリアス:なし // ============================================================ // 変数宣言 var command = ''; // PPxコマンドワーク var WSHObj = ''; // wshシェル var mExt = ''; // 現窓のマークファイル拡張子 var cWinMrg = '"C:\\Program Files\\WinMerge\\WinMergeU.exe"'; //現窓のマークファイル拡張子取得 mExt = PPx.Extract('%T'); //現窓のマーク数チェック switch (PPx.EntryMarkCount) { case 2: command = PPx.Extract('%#FDC'); PPx.Execute('%K"@^END"'); // マークを外す break; case 1: command = PPx.Extract('%*extract(~"%%#/FDCM")'); //反対窓のマークファイルを取得(デリミタ/) if ((command != '') && (command.indexOf('/') <= 0)) { //デリミタがなければマーク1つと判定 command = PPx.Extract('%FDCM') + ' ' + command; PPx.Execute('%K"@^END"'); // マークを外す PPx.Execute('*execute ~,%%K"@^END"'); // マークを外す(反対窓) } else { command = ''; } break; // case 3: //現在WinMargeUは3ディレクトリ比較に対応していない default: command = ''; break; } command = cWinMrg + ' ' + command; WSHObj = new ActiveXObject('WScript.Shell'); //文字コードセット if (mExt.toLowerCase() == 'rc') { mExt = PPx.Extract('reg import "C:\\Program Files\\WinMerge\\WinMerge 1200.reg"'); } else { mExt = PPx.Extract('reg import "C:\\Program Files\\WinMerge\\WinMerge 65001.reg"'); } WSHObj.Run(mExt,0,true); //プログラム起動 WSHObj.Run(command,1,false); // false:終了待機しない // 後処理 WSHObj = ''; PPx.Quit();