便利なテキストエディタがあります。
今回言及するバージョンは2.1.0.0です。
しかし、残念ながら普通に使って気づくでも、完璧ではありません。
例えばTeraPadには存在する「文字コードを指定して上書き保存」という機能が見つからず、
「名前を付けて保存」で文字/改行コードを指定することはできますが、もちろん「上書きしますか」と一度聞かれることになります。
そこで、まずテキストファイルをエクスプローラで新規作成してサクラエディタで開き、
内容を入力して保存し、一回閉じます。
次にnkfでUTF-8に変換してからサクラエディタで開き直す、
ということをよくやるようになったのですが、この時に文字コードが判別されず元のSJISのままで開かれてしまい、文字化けしてしまいます。
幸い文字コードを指定して読み込み直す機能はあるのですが、二度手間です。
一応「前回と異なる文字コードのとき問い合わせを行う」という設定はありますが、
いちいち問い合わせせずに常に今の文字コードで開いて欲しいです。
一応確認しましたが、TeraPadならそんな変な動作にはならず、素直にUTF-8に変換した直後からUTF-8で開いてくれました。
というわけで、公式のWikiに要望を出しました。
Request/457 - SakuraEditorWiki
しかし、もちろん要望を出したからといってすぐに修正され、手元のプログラムに反映されるわけではありません。
そこで、プログラムが改善されるまでの間、応急処置がしたくなります。
サクラエディタのドキュメントを見ると、コマンドラインで文字コードを指定する機能があったので、これを活用することにしました。
まず、自前で文字コードを判別するプログラムを頑張って書いてもいいのですが、
めんどくさいのでnkfに丸投げし、その結果をサクラエディタに渡すプログラムを書きました。
#!/usr/bin/perl
use strict;
my $editor="C:\\Program Files\\sakura\\sakura.exe";
my %code=(
"Shift_JIS" => 0,
"ISO-2022-JP" => 1,
"EUC-JP" => 2,
"UTF-16" => 3,
"UTF-8" => 4
);
for(my $i=0;$i;
close(NKF);
chomp($nkfcode);
my $nowcode=$code{$nkfcode};
if(!defined($nowcode)){$nowcode=99;}
system "cmd /C start \"\" \"$editor\" -CODE=$nowcode -- \"$nowfile\"";
} else {
system "cmd /C start \"\" \"$editor\" -- \"$nowfile\"";
}
}
キー : HKEY_CLASSES_ROOT\txtfile\shell\open\command
値 : (既定)
データ : C:\Perl\bin\perl.exe C:\myprograms\sakuraeditorproxy\sakuraeditorproxy.pl "%1"
一瞬コマンドプロンプトのウィンドウが表示され、少し開かれるまでに時間がかかりますが、
SJISで保存したファイルをUTF-8に変換してから開いても、きちんとUTF-8で読み込んでくれることがわかります。
また、この方法では(nkfが非対応のようなので)CESU-8やUTF-7などに対応できてないようですが、
自分は普段そんな特殊な文字コードは使用しません。
よって、応急処置としてはこれで十分だと思います。
サクラエディタの前の文字コードへのこだわりに困っている人は、この方法を試してみてはいかがですか?
ただし、この方法の設定をした、もしくはしようとしたことによる、
関連付けが破壊された、テキストファイルが開けなくなった、レジストリが壊れた、Windowsが起動しなくなった、
アカウントを停止された、退学になった、クビになった、解雇された、ウイルスが検出されて通報された、
ウイルス対策ソフトに作業を妨害された、HDDがお亡くなりになった、SSDが寿命を迎えた、
キーボードが壊れた、マウスが壊れた、親に文句を言われた、ディスクの空き容量が無くなった、
環境変数%PATH%のデータが消えた、ウイルスに感染した、遠隔操作で掲示板への書き込みが行われた、
など、一切の損害について私は責任を負いません。自己責任でお願いします。