CANPAN ブログ検索
Loading
  • もっと見る
<< 2019年08月 >>
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
カテゴリアーカイブ
最新記事
最新コメント
「HTML」ファイルの「文字化け」対策 [2017年04月15日(Sat)]
「HTML」ファイルの「文字化け」対策


 今年になって、「家庭内LAN」用サーバーの「HTML」ファイルが「文字化け」していることに気が付きました。

 「ウェブブラウザ」の「Internet Explorer」ならば、メニューで「表示」→「エンコード」→「日本語(自動選択)」で対応できますが、「Google Chrome」では、「エンコード」の設定が見つかりませんでした。

 ネットで調べると、「Google Chrome」にも、「エンコード」の設定がありましたが、最新版では無いようです。

 どうも、「HTML」ファイルの「文字コード」が、「Shift_JIS(シフトジス)」から「UTF-8(ユーティーエフはち、ユーティーエフエイト)」に移行したようです。

 ただし、何回も「Shift_JIS(シフトジス)」を表示しようとすると、「ウェブブラウザ」が根負けして「Shift_JIS(シフトジス)」でも表示できるようです。

 でも、「Shift_JIS(シフトジス)」でも表示できるように、クリックし続けることは精神的に良くありません。

 ということで、「HTML」ファイルは、「UTF-8」で保存することにしました。

 しかし、過去の(膨大な?)遺産をどうするか悩んで、解決法を見つけました。

 私の、「HTML」ファイル作成は、次の方法で行っています。

 「首相官邸新着情報メール」を例にとって説明します。

1 「首相官邸新着情報メール」の「必要な範囲をマウスで選択」して、「秀丸エディタ」で新規に作成したファイルに貼り付けます。

2 「秀丸エディタ」で、行頭に◎印を付けたり、段落に合わせて改行数を統一したりして、文の加工をした後で「2017_04_10.txt」として保存します。
3 「Microsoft Word (2010)」で、「2017_04_10.txt」を開き、「文書校正」した後で、ファイルの種類を「Webページ(フィルター後)」で「2017_04_10.htm」として保存します。
※保存するときのオプションとして、「ツール」→「Webオプション」→「エンコード」→「Unicode(UTF-8)」としています。

 「文字コード」と「改行コード」は次のようになります。

「2017_04_10.txt」
文字コード 「Shift-JIS」
改行コード 「CR+LF」

「2017_04_10.htm」(旧設定)
文字コード 「Shift-JIS」
改行コード 「CR+LF」
<head>
<meta http-equiv=Content-Type content="text/html; charset=shift_jis">

 ただし、最近では、「Microsoft Word (2010)」で保存するときに、「エンコード」で「Unicode(UTF-8)」を指定していますので次のようになります。

「2017_04_10.htm」(新設定)
文字コード 「UTF-8」
改行コード 「CR+LF」
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">

 今後、「改行コード」は、「文字化け」に関係ないようなので省略します。

 確認してみると、「Microsoft Word (2010)」で保存した「HTML」ファイルは、次の2か所を修正すれば良いことがわかりました。

1 「HTML」ファイルの「文字コード」を、「Shift-JIS」から「UTF-8」に変更する。

2 HTML」ファイルの「charset=shift_jis」を「charset=utf-8」に変更する。

 しかも、「秀丸エディタ」で「HTML」ファイルを開き、「charset=shift_jis」を「charset=utf-8」に変更した後で、「Unicode(UTF-8)」で保存すれば良いことがわかりました。

 そこで、「秀丸エディタ」で「HTML」ファイルを開き、「秀丸エディタのマクロ」を使うことにしました。

*****秀丸エディタのマクロ開始*****
setcompatiblemode 0x0F;
gofiletop;

replaceall "charset=shift_jis" , "charset=utf-8" , regular, nohilight; // 文字の置換

setencode 6, 1; // 「文字コード」をutf-8へ変換

saveexit; // ファイルを保存して終了

*****秀丸エディタのマクロおわり*****

 ところが問題が起きました。

1 ファイルを一つづつ開いてマクロを実行しなければならない。
2 複数のファイルを同時に開こうとすると、100ファイルまでという制限があった。

 次に考えることは、自動的にファイルを読み込んで、処理することです。

 幸いなことに、「秀丸エディタのマクロライブラリ」で「ファイルエンコードバッチ変換」を見つけました。

*****引用開始*****
ファイルエンコードバッチ変換 ゆ〜り 2003/07/07
Download >> encode_change.lzh
このマクロは、特定のフォルダに保存されたテキストファイルのエンコード形式を、一括して変更するものです。
==============================================================================

【登 録 名】encode_change.lzh
【ソフト名】秀丸エディタ専用マクロ「ファイルエンコードバッチ変換」Ver. 1.0
【著作権者】坂東 勇利 (Yu-ri Bando - i_yuruib@ybb.ne.jp)
【対応機種】秀丸エディタ
【動作確認】TOSHIBA DynaBook SS 3440 (Windows 2000 Professional)
【開発言語】秀丸マクロ
【公 開 日】2003/07/07
【使用方法】解凍後、秀丸でマクロ登録してご使用下さい。
【種  別】フリーウェア

==============================================================================
*****引用おわり*****

 「encode_change.lzh」を解凍すると次のファイルが出てきます。

「readme.txt」
「encode_change.mac」

 「readme.txt」には、使い方などが書いてあります。

 「encode_change.mac」を秀丸の「マクロファイル用のフォルダー」にコピーして実行します。


 「encode_change.mac」を使ってみて、問題点が出てきました。

1 「charset」を変更しないため、「文字コード」を「UTF-8」に変えたが「charset=shift_jis」のままなので、「HTML」ファイルに文字化けが発生しました。

2 フォルダー内のファイル処理でエラーが出た場合、「HTML」ファイルで、「文字コード」が「charset=shift_jis」と「charset=utf-8」が混在することになり、次回マクロを実行したときに、「文字コード」が「charset=utf-8」の「HTML」ファイルを、「charset=shift_jis」と見なして開くことになる。


 この問題点を解消するために、以下のように「encode_change.mac」を修正しました。

1 修正する概要は、多くの「ウェブブラウザ」で閲覧できるように「HTML」ファイルの「文字コード」を「UTF-8」に変えます。

2 修正するファイルを開くときに、「文字コード」を限定しません。

3 修正するファイルを開き、「charset=shift_jis」を「charset=utf-8」に変更します。

4 修正するファイルを閉じるときに、「文字コード」は「charset=utf-8」に限定します。

5 「charset=」に記述が基準から外れる場合や、「charset=」が存在しない場合は、ファイルを閉じる前にマクロを途中で止めます。ただし、ファイルを開いたときに「charset=utf-8」ならば、「charset=utf-8」を「charset=utf-8」に変更することにより、マクロが途中で止まるのを未然に防止します。

6 ファイルの拡張子指定は残しています。拡張子が「htm」と「html」の場合があるためです。


 それでは、「HTML」ファイルの「文字コード」を「UTF-8」に変えるために修正した「秀丸エディタのマクロ」の「encode_change.mac」は次のようになります。

 私の手持ちの「HTML」ファイルでしか、「秀丸エディタのマクロ」の確認をしていませんので、変則的な「charset=」が出てくることがありますので、自己責任でマクロを実行してください。また、「HTML」ファイルに変な記述があるとマクロを途中で止めるようにしていますが、過信しないでください。ある「HTML」ファイルでは「charset=x-sjis」と書いてあったため、それに対する処理もマクロに書きました。

 このマクロの著作権者「坂東 勇利 (Yu-ri Bando - i_yuruib@ybb.ne.jp)」さんが種別「フリーウェア」と書いてあるため、使わせていただきました。この場を借りてお礼を申し上げます。

 しかし、このマクロの修正については、「坂東 勇利 (Yu-ri Bando - i_yuruib@ybb.ne.jp)」さんの許可を取っていません。

 このマクロの修正で不具合が出ないかを、ネットで見ている皆さんに検証して貰うために、公開しています。

 ですから、「encode_change.mac」の次期バージョンについての、私から「坂東 勇利 (Yu-ri Bando - i_yuruib@ybb.ne.jp)」さんへの要望です。

 つまり、私はマクロの修正の著作権も「坂東 勇利 (Yu-ri Bando - i_yuruib@ybb.ne.jp)」さんにあると判断しています。

 最後に、老婆心ながら、(失敗が多い私から助言すると、)「文字コード」を「UTF-8」に変える「HTML」ファイルを別のフォルダーにコピーしてバックアップとした後で、「HTML」ファイルに対しマクロを実行すると、マクロの実行で失敗しても元の「HTML」ファイルが残るので安心してマクロを実行できます。(ここは試験に出ません。)


*****修正した「encode_change.mac」開始*****
//****** encode_changer.mac for Hidemaru by Yu-ri Bando. ******
//****** (C) 2003.  Yu-ri Bando.  All rights reserved. ******





//*** 変数の宣言と初期化 ***

#subdir = 0;





//*** 検索パスの指定 ***

Path:


// 前回使用したパスをレジストリから取得

createreg "CURRENTUSER","Software\\Hidemac";


// レジストリから取得した値を変数に格納

$regPath = getregstr("PrevEncPath");


// 検索パスの入力

$path = input("ファイルのパスを指定してください。" , $regPath);


// エラー処理

if (! result)
{
endmacro;
}


// パスが指定されない場合の処理

if ($path == "")
{
message "パスを指定してください。";
goto Path;
}


// 入力したパスをレジストリに保存

writeregstr "PrevEncPath", $path;





//*** 検索する拡張子の指定 ***

Extension:


// 前回使用した拡張子をレジストリから取得

createreg "CURRENTUSER","Software\\Hidemac";


// レジストリから取得した値を変数に格納

$regExt = getregstr("PrevEncExt");


// 拡張子の入力

$extent = input("処理するファイルの拡張子を指定してください。. を入力する必要はありません。" , $regExt);


// エラー処理

if (! result)
{
endmacro;
}


// 拡張子が指定されない場合の処理

if ($extent == "")
{
message "拡張子を指定してください。";
goto Extension;
}


// 入力した拡張子をレジストリに保存

writeregstr "PrevEncExt", $extent;





//*** サブディレクトリ検索の判断 ***

question "サブディレクトリ内も検索しますか?";

if (result == yes)
{
#subdir = 1;
}

else
{
#subdir = 0;
}



//*** 書き込みファイルのエンコード形式の指定 ***

SaveEncode:


// 前回使用したエンコード情報をレジストリから取得

createreg "CURRENTUSER","Software\\Hidemac";


// レジストリから取得した値を変数に格納

$regSaveEncode = getregstr("PrevSaveEncode");


// エンコード形式の入力

$saveEncode = "utf8";

// 入力したエンコード形式をレジストリに保存

writeregstr "PrevSaveEncode", $saveEncode;





//*** ファイルリスト生成処理 ***

Encode:


// ファイル名のワイルドカードを生成

$repFileWild = "*." + $extent;


// ファイル名の拡張子を生成

$repFileExt = "." + $extent;


// ファイルを GREP してファイルリストを生成

if (#subdir == 1 )
{
grep ".", $repFileWild, $path , subdir , filelist, regular;
}

else
{
grep ".", $repFileWild, $path , filelist, regular;
}


// 配列に絶対パスでファイル名流し込み

gofiletop;
#grepfile = hidemaruhandle(0);
#i = 0;
while (true)
{
searchdown $repFileExt;

if (! result ) break;
{
searchdown "(";
beginsel;
golinetop;
copy;
beginclipboardread;
$filename = getclipboard;
$files[#i] = $path + "\\" + $filename;
#i = #i + 1;
down;
golinetop;
}
}


// ファイルが見つからない場合の処理

if ( #i == 0 )
{
question "指定したパスに指定された拡張子を持つファイルが存在しません。もう一度パスを指定しますか?";

if (result == yes)
{
goto Path;
}

else
{
endmacro;
}
}


// 処理中メッセージ表示

title "エンコード変換処理中です。処理中は、他の作業を行ったり、他のウィンドウに切り替えないでください。";


//*** 置換・保存処理 ***

openfile "/h " + "";
//newfile;
insertreturn;
#tempfile = hidemaruhandle(0);

#flg = 0;
#l = #i;
#i = #i - 1;
while(#i > -1)
{
//openfile "/h " + $files[#i];

openfile $files[#i];

#openfile = hidemaruhandle(0);
disabledraw;

// 置換(20170414 追加処理)

replaceall "charset=shift_jis" , "charset=utf-8" , regular, nohilight;
if (! result)
{
replaceall "charset=utf-8" , "charset=utf-8" , regular, nohilight;
if (! result)
{
replaceall "charset=x-sjis" , "charset=utf-8" , regular, nohilight;
if (! result)
{
replaceall "charset=UTF-8" , "charset=utf-8" , regular, nohilight;
if (! result)
{
endmacro;
}
}
}
}

// 追加処理おわり


// 保存

enabledraw;

saveas $files[#i], utf8;

// 開いたファイルを閉じる(20170414 追加処理)

closenew;

// 追加処理おわり

#i = #i - 1;
#flg = 1;
}


//*** 終了処理 ***

setactivehidemaru #grepfile;
title 0;

if(#flg==1)
{
closehidemaruforced #openfile;
}

closehidemaruforced #tempfile;


//*** 正常終了メッセージの表示 ***

question "エンコード形式の変換を完了しました。今回使用したパスと拡張子の情報をレジストリに保存しますか?";

if (result == no)
{
deletereg "CURRENTUSER","Software\\Hidemac";
}

message "処理が正常に終了しました。";
endmacro;
*****修正した「encode_change.mac」おわり*****

Posted by 山田 雄一郎 at 10:47
この記事のURL
http://blog.canpan.info/hofu_nanboku/archive/368
プロフィール

山田 雄一郎さんの画像
山田 雄一郎
プロフィール
ブログ
リンク集
http://blog.canpan.info/hofu_nanboku/index1_0.rdf
http://blog.canpan.info/hofu_nanboku/index2_0.xml