Dreamweaverで文字コードが勝手にSJISに変更される

DW4でphpファイルやjsファイルを開くと、文字コードをもともとUTF-8で作っていたつもりのファイルでも勝手にShift-JISに変更してくれる。それが発生する場合としない場合があるので、まあいいかと思っていたが最近どうも気になるので少し調べてみたところ、発生する条件はほぼ下記の通りになった。

変更されない(UTF-8で保存/日本語有り)

/*日本語コメント*/
<?php
echo "こんにちは世界!";
?>

変更される(UTF-8で保存/日本語なし)

/*japanese comment*/
<?php
echo "hello world!";
?>

つまり、ファイルの保存時に日本語(2バイト文字?)がどのような形であれ含まれていないと、次回開いたときに文字コードがShift-JISになってしまうらしい。

原因が分かったところで、解決方法を探してみると次のサイトが見つかった。

1.ファイルの先頭に文字コードを書き込む

DreamWeaverでPHPファイルのエンコードを勝手に変えちゃうの何とかした

それによると各ファイルの先頭に文字コードの設定を書き込み、DWに強制的に文字コードを認識させるというもの。jsを除き、確かに動作はするけれど、なんだかまどろっこしい。cssはまだ良くてもphpはちょっと。。

phpの場合

<?php /* <meta content="charset=UTF-8"?> */ ?>

jsの場合(どうもうまくいかない)

/* @charset "UTF-8"; */

cssの場合

@charset "UTF-8";

2.UTFで保存するときにBOMを書き込む

Adobe Forums

UTF-8保存時にBOMを書き込むことでUTF-8として認識させることはできるけれども、肝心のphpファイルを実行したときにheader()関連でエラーが出てしまうので実用的ではない。そして日本語windowsの場合、OSデフォルトの文字コードがShift-JISのため、DWは編集対象のファイルの文字コードが明示的に示されていない場合にはShift-JISに変えるみたい。以下原文。

~省略~
> When I save the document with BOM
> signature, forcing it to be UTF8 -no mater what-, the problem has solved.
Be careful using the BOM with PHP files. PHP interprets the BOM as
output, causing problems with the header() function and sessions.
> Probably DW is thinking "Hey! this guy's system is Japanese, so I should
> ignore the DW settings and set this to SJIS".
Bingo! If you're using a Japanese operating system that defaults to
Shift_JIS, that's what Dreamweaver will use in files that don't have a
way of indicating their encoding. The UTF-8 setting applies only to
files that have a meta tag or other method of declaring their encoding.

関係ないけど、このくだりには笑った。いじめられてる。。

> Probably DW is thinking "Hey! this guy's system is Japanese, so I should
> ignore the DW settings and set this to SJIS".

3.Dreamweaverの初期設定を変更する

Dreamweaver8の文字コード

「編集」->「環境設定」->「新規ドキュメント」の中にある「エンコーディングが指定されていない既存ファイルを開くときに仕様」のチェックをはずす、という記述もあったけれど、CS4では効かないみたい。やりかたが悪いのかな。

結局のところ1の方法か、各ファイルに日本語でコメントを入れておくのが実用的なのかな。それにしても、余計な機能はいらないからこういった細かい部分をしっかり作り込んで欲しい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA