サクラエディタのマクロなどで文字化け対策(UTF-8とSJIS)

スポンサーリンク

サクラエディタと前回の文字コード

サクラエディタは前回開いたときの文字コード指定を記憶しており、前回と異なる場合は以下のようなダイアログが出ます。

サクラエディタで開く場合の文字コードとUTF-8

この設定は 設定 > 共通設定 > ファイル にある「前回と異なる文字コードのとき問い合わせを行う」がチェックONだとダイアログが出ます。

サクラエディタの文字コードと警告の設定

この設定の記憶は「sakura.ini」に保存されていますが、テキストファイルなので手作業で修正できます。

開いたファイル名でテキスト内を検索すると以下のような行が見つかります。

先頭の「MRU[04]」というのがグループで、以下の「メモ.txt」の場合は「04」となっているものが同じ「メモ.txt」の設定です。

MRU[04].bFavorite=0
MRU[04].nCharCode=0
MRU[04].nType=1
MRU[04].nViewLeftCol=0
MRU[04].nViewTopLine=0
MRU[04].nX=34
MRU[04].nY=8
MRU[04].szMark2=:0
MRU[04].szPath=J:\メモ.txt

文字コード設定は以下の行で指定されており、「0」だと「SJIS」です。

MRU[04].nCharCode=0

UTF-8の場合は「4」です。

MRU[04].nCharCode=4

ここで指定する数字は以下のヘルプから確認できます。

文字コードセット指定

「sakura.ini」は以下のパスにあります。

C:\Users\[ユーザー名]\AppData\Roaming\sakura

ユーザー名が「Sakue」の場合は以下のような感じです。

C:\Users\Sakue\AppData\Roaming\sakura

XPなど古いOSの場合はプログラムフォルダに保存されるので以下です。

C:\Program Files (x86)\sakura

サクラエディタのファイルタイプごとの文字コード設定

すでに対象ファイルを開いた状態から設定をする場合は 設定 > タイプ別設定 > ウィンドウタブ から行います。

タイプ別設定メニュー

現在開いていない拡張子のファイルの場合は 設定 > タイプ別設定一覧 の「設定変更」ボタンから入れます。

拡張子ごとの設定への入り口

ファイルタイプ(拡張子)ごとのデフォルト文字コードは以下から設定できます。

ファイルタイプごとのデフォルト文字コード

これはデフォルトの文字コードなので、新しいファイルを開いたときはこの値が適用されますが、文字コードを指定して開いたりすると「sakura.ini」へ保存されるので、次回はそちらが優先されます。

サクラエディタの編集時に文字化けする場合

異なる文字コードで開いてしまうと以下のように全体が文字化けします。

サクラエディタでの文字化け例

異なる文字コードで開いてしまうと文字化けするので ファイル > 開き直す > 文字コード指定 で正しい文字コードを指定して開き直しまうす。

サクラエディタで文字コード指定して開く

保存時の文字コード指定は、 ファイル > 名前をつけて保存 から「UTF-8」などを指定して「上書き保存」します。

マクロ名などメニュー内が文字化けする場合

サクラエディタの古い環境からの移行時に出たものですが、最新版のサクラエディタだと「sakura.ini」は「UTF-8 BOM付」で保存されており、古いSJISの「sakura.ini」をコピーして持ってくると文字化けします。

「sakura.ini」を開いてみるとマクロ名などが記述されており、これを読み込んでいるためです。
例えば以下の行などです。

Name[000]=選択行の各種ソート(並び替え)

「sakura.ini」を開き、 ファイル > 名前をつけて保存 から「UTF-8 BOM付」で上書き保存すると治ります。

マクロからファイルを開くと文字化けする場合(FileOpen)

サクラエディタのマクロでファイルを開く場合(サクラエディタ上で編集)は以下のようにしますが、末尾で文字コードを指定しています。

以下はJScript(JavaScript)からSJISで開く場合の例で、末尾に「0,0」とありますが、最初の「0」がSJISを示しています。

var e = Editor;
e.FileOpen("J:\\Datas\\NIKKI.txt",0,0);

ここで指定する文字コードが異なると以下のようなダイアログが毎回出ますので修正します。

サクラエディタで開く場合の文字コードとUTF-8

ここで指定する数字は以下のヘルプから確認できます。

文字コードセット指定
文字コード
-1 ダイアログを表示(省略時規定値)
0 SJIS
1 JIS
2 EUC
3 UTF-16
4 UTF-8
5 UTF-7
6 UTF-16BE
7 CESU-8
8 Latin1(Windows-1252)
90 CP_ACP (sakura:2.2.0.0以降)
91 CP_OEM (sakura:2.2.0.0以降)
コードページ番号 (sakura:2.2.0.0以降)

なので、UTF-8で開きたい場合は以下のように「4」を指定すればOKです。

var e = Editor;
e.FileOpen("J:\\Datas\\NIKKI.txt",4,0);

マクロ内でのファイル読み込み

JScript(JavaScript)のマクロでファイルを読み込む場合は「FileSystemObject」の「OpenTextFile」メソッドを使うのが簡単ですが、指定できるのはASCII、Unicode(UTF-16)、システム既定値の3つのみです。

var obj = new ActiveXObject('Scripting.FileSystemObject');
var f = obj.OpenTextFile(path+readFileName);
tmp = f.ReadAll();

このためUTF-8で開く場合は「ADODB.Stream」から読み込みます。

以下のようにもう少し細かくパラメータが指定できるのでUTF-8でも問題なく読み込めます。

// UTF-8用
var adodbobj = new ActiveXObject("ADODB.Stream");
adodbobj.Type = 2; // ファイルタイプ指定(1でバイナリ、2でテキスト)
adodbobj.charset = "utf-8"; // 文字コード指定
adodbobj.Open();
adodbobj.LoadFromFile(path+readFileName);
var tmp = adodbobj.ReadText(-1); // -1で全行、-2で一行ずつ読み込み
adodbobj.Close();

マクロファイルの文字コードとマクロ内文字列

マクロ内で文字列を定義して利用する場合、マクロファイルの文字コードが文字列の文字コードになりますが、UTF-8の場合は「UTF-8 BOM付」で保存する必要があります。
UTF-8でも「BOM無し」で保存すると、UTF-8なのにSJISとして扱われてしまうので日本語が文字化けします。

例えばJScript(JavaScript)のマクロで以下のように定義して「InsText」で挿入する場合の文字列等です。

var testString = "てすと\r\n";

「UTF-8」にし「BOM」にチェックを入れて上書き保存します。

マクロはUTF-8のBOM付で保存

JScript(JavaScript)のマクロでテストする場合は以下のような関数を定義しておき、

// alertダイアログ代わり(デバッグ用)
function alert(msg, title, type) {
  var shell = new ActiveXObject("WScript.Shell");
  return shell.Popup(msg, 0, title, type);
};

以下のように出力してみます。

alert("テスト");

マクロがUTF-8のBOM無しで保存されている場合、文字コードがUTF-8なのにSJISで扱ってしまうために以下のように文字化けしてしまいますが、

文字化け

「UTF-8 BOM付」で保存すると以下のように正しく表示されます。

文字化け改善例

マクロ内で定義した文字列が文字化けする場合は上記をチェックしてみましょう。

コメントフォーム

タイトルとURLをコピーしました