保存時に漢字コードがかわってしまうときNo.18733
ai さん 05/01/27 15:42
 
Ver4.14の秀丸にようやく移行でき、快適につかっております。

書き込み時に漢字コードがこわれる現象がおきたので、報告します。
読み込み時ではありません。


拡張子.cppのファイルをファイル名をコマンドラインから渡すかたちで開き、保存し
ました。これを複数のファイルに対してかちゃかちゃ行いました。
hidemaru.exe xxx1.cpp
hidemaru.exe xxx2.cpp
hidemaru.exe xxx3.cpp
hidemaru.exe xxx4.cpp

そのなかのひとつだけ漢字コードが壊れて保存されてしまったファイルがあります。
Ver3.XXまでは漢字コードの自動認識はせずShift-JIS固定にしていました。読み込み
時にたまに認識に失敗することがあったためです。
いまみたら自動認識になっていました。(変えた覚えはないですが、変えたかもしれ
ません)

読み込み時に失敗するならともかく、書き込み時は困ります。
.cppの漢字コードがこわれており、.bakはShift-JISになっています。
今日は秀丸しかつかっておらず、バックアップとしてできているのは .bak のみです。
~のつくファイルはありません。

たま〜にしかおきない現象で再現する手順はわかりません。

もともと秀丸の漢字コード認識はやや甘いのでもとの通り、Shift-JIS固定に設定は
もどしておきますが、書き込み時にこの設定が影響するのかどうかわかりません。

以前にこの現象が起きたことがあるファイルタイプは .cpp, .h .fi でそれぞれ一回
ずつあります。
.hの場合、150行程度の長さがあり、100行めあたりに // コメントで一ヶ所だけ日本
語がありました。
.cpp はところどころに(関数ごとぐらいに) 日本語があります。
.fi は Fortranのヘッダファイルです。
いずれも半角カナはありません。

関係ありそうな設定をメモしておきます。

ファイルタイプ別設定-共通
 エンコードの種類の指定(D) 自動
 改行コード 自動

ファイルタイプ別設定-C言語ソースファイル
 エンコードの種類の指定(D) 自動
 改行コード 自動

開く-自動判定の設定
 標準のエンコード 日本語(Shift-JIS)
 XML宣言/HTMLのMeta/Unicode-BOM はオン

以上よろしくお願いします。

[ ]
RE:18733 保存時に漢字コードがかわってしNo.18735
秀丸担当 さん 05/01/27 18:55
 

>書き込み時に漢字コードがこわれる現象がおきたので、報告します。
>読み込み時ではありません。

もし秀丸のバグで壊れているとしたら、まずいので、すぐ直さなくてはいけませ
ん。申し訳ありません。
V4.00が出たばかりの頃には、Unicodeのファイルの読み込みで、「テンポラリフ
ァイルを利用して再オープンの高速化」が有効になっている場合、ある操作をし
た場合に壊れる場合がある問題がありました。これは既にV4.07までに修正され
ています。(V4.14での設定は[動作環境]→[パフォーマンス])
それ以外は、今までに同じような報告はありません。
再現性も低いということですので、何か特殊な操作による問題かもしれません。

>関係ありそうな設定をメモしておきます。

この設定は、問題が起きていたときの設定でしょうか。

[動作環境]→[ファイル]→[エンコード2]→[EUCコード指定ドライブ]が指定され
ている場合、このドライブのファイルは保存するだけで変更されてしまいます。
このようなことはないでしょうか。

読み込んだ後に、エンコードの種類が切り替わる可能性があるのは、[ファイル]
→[エンコード]より、エンコードを切り替えた場合と、config文を含むマクロを
実行した場合があります。
そのような操作はしていないでしょうか。

お手数ですが、他にも色々教えてください。
文字化けは、どのような文字化けでしょうか。Shift-JISではない別のエンコー
ドで保存されているということでしょうか。
日本語部分だけが全て文字化けするのでしょうか。それとも、一部分だけが文字
化けするのでしょうか。
この現象は、いつから起きているのでしょうか。

もし差し支えなければ、問題の起きたファイルと、設定内容をファイルに保存し
たものを送っていただけると助かります。
設定内容は、[その他]→[設定内容の保存/復元]よりできます。
不都合がある場合、どちらかだけでも結構です。
送り先は、xxxxxxxx@nifty.ne.jp まで秀丸担当宛てであることを書いて送って
ください。
よろしくお願いします。

[ ]
RE:18735 保存時に漢字コードがかわってしNo.18737
ai さん 05/01/28 10:53
 
訂正:漢字コードがかわったわけではありませんでした。

よくみると、文字化けではなくビット落ち?のようです。
nkfで復旧できず、ところどころもとのままの文字が見えます
ソースをじかに添付するわけにもいかないので別途メールで送ります。

関係ありそうな常駐ソフト:
 秀Caps8.1(カーソル加速はこっちをつかい、秀丸ではオフ)
 AltIme3.15
 Norton AntiVirus 9.0 (すこし前にこのバージョンで以前は7.6をながいこと)
念のため/上記AnciVirusでVirusはみつかっていません。

EUCドライブ指定はまちがうとトラブルの元なので使っていません。

問題のファイルは自作のソースジェネレータによるcppソースで、数年間つかってい
ます。
一見似たような(=クラス名違いだけの関数が含まれた)ソースが大量(=60個ほど)あり、
そのなかの10個程度のファイルを連続で一個いっこひらいて、関数の引数の数字を1
文字
かえて「保存して終了」しました。

ダイアモンドカーソルで行内を「横に移動(カーソル右)」して「上書に切替」て数字
を書き
換えて「保存して終了」しました。
今回は特殊な操作はしていません。別の行に移動すらしていません。
これを複数のファイルに連続して行いました。(秀丸のgrepの結果からではありません)

現象がおきだしたのはVer4.14にしてからで、それまではVer3.18です。
(どうもVer4系と相性があわず、ダイアモンドカーソルの加速と新規ファイルの問題
にぶちあたり安定したらしい4.14にようやく移行したのです)

[動作環境]→[パフォーマンス]は最大の―を1番目とかぞえて3番目にあります。
バージョンは上記の理由により何回かあげては下げています。

壊れたファイルはCVSから復旧しました。

[ ]
RE:18737 保存時に漢字コードがかわってしNo.18739
秀丸担当 さん 05/01/28 15:21
 

ファイルを頂きました。ありがとうございます。
ファイルを検証したところ、元々Shift-JISのファイルを、UTF-8として読み込み、
失敗して文字化け、その状態でUTF-8として保存、とした場合の壊れ方でした。
それを再びShift-JISとして読み込むと、現象の文字化けと同様になります。

この手順としてはバグではありません。
何らかの理由で、これと同じことが起きているということになります。

この手順でやると、最初のUTF-8として読み込むときに、既にエラーメッセージ
が出ます。そしてこの段階で既に文字化けしているはずです。
書き込みだけで壊れているわけではありません。
簡単に再現できると思います。

エラーメッセージが出ずに気付かずにこの現象と同じことが起きているとしたら、
気付かない間にマクロが動いているのかもしれません。
マクロで、
openfile $file, utf8;
saveas $file, utf8;
というような感じで実行されると、エラーが出ずに同様の壊れ方をします。

少なくとも、読み込みは普通に出来ていて、保存だけで一瞬でこれと同じプロセ
スで破壊が起きるのは考えづらいことです。

このような手順に関連することで、何か心当たりはないでしょうか。

[ ]
RE:18739 保存時に漢字コードがかわってしNo.18749
ai さん 05/01/31 16:11
 
調査ありがとうございます。

起動直後に漢字コードの判定ができなかったというメッセージはありませんでした。
編集中の漢字コードの表示は確認していません。

(バッチファイルから起動) start "dummy" (フルパス)\hidemaru.exe xxxx.cpp
^kd 「保存して終了」

マクロは今回はつかっていません。つかっていればわかります。
「保存して終了」ですからsaveasを直接は呼んでいません。(結果的に処理本体は同
じ箇所を通るだろうとは思いますが)

Ver4.xxで一時期openfileに問題があったことは関係ないでしょうか。

壊れたファイルのディレクトリにはShift-JISのファイルしかありません。
以前、秀丸の漢字コードの自動判定が(utfではなくEUCのときですが)あやしかったこ
ともあって、秀丸ではShift-JISのファイルだけを編集するようにしています。

[ ]
RE:18749 保存時に漢字コードがかわってしNo.18752
秀丸担当 さん 05/01/31 19:01
 

>起動直後に漢字コードの判定ができなかったというメッセージはありませんでした。
>編集中の漢字コードの表示は確認していません。

そうですか。
だとしたらやはり気付かないうちにマクロが実行されている気がしてならないで
す。
マクロファイルのあるフォルダをgrepして、"utf8"という引数が使われているマ
クロが無いか、確認していただくことはできますでしょうか。

>Ver4.xxで一時期openfileに問題があったことは関係ないでしょうか。

関係あるかもしれませんが、現時点ではわかりません。
調査用のコードを入れた秀丸を作成して、どこで問題が起きたているかを確認し
ていただく必要があるかもしれません。
調査版秀丸を作成する場合は度々お手数ですが、ご協力お願いします。

[ ]
RE:18752 保存時に漢字コードがかわってしNo.18753
ai さん 05/01/31 20:37
 
お手数おかけします。

秀丸のあるディレクトリをカレントとして、秀grepでサブディレクトリ考慮、大文字
小文字区別なし、*.macに対してutfを検索しましたが、みつかりません。マクロディ
レクトリは秀丸ディレクトリの下にあります。

そもそも.macは2000年までの古い日付のファイルしかありませんので、utf対応以前
のバージョンのマクロしかないと思います。
もしかしたらほかのパスのマクロを動かせるのかもしれませんが、動かし方自体わか
りません。

調査に必要であれば秀丸のあるディレクトリ一式、秀丸関係のレジストリ一式などを
丸めたものをお渡しできます。旧バージョンに戻さざるを得ないときのために古い
バージョンのインストールディレクトリもまるごといくつか保存してあります。


ソースを見れないのが歯がゆいところです。


[ ]
RE:18753 保存時に漢字コードがかわってしNo.18769
秀丸担当 さん 05/02/02 15:58
 

>秀丸のあるディレクトリをカレントとして、秀grepでサブディレクトリ考慮、大文字
>小文字区別なし、*.macに対してutfを検索しましたが、みつかりません。マクロディ
>レクトリは秀丸ディレクトリの下にあります。

そうですか。ありがとうございます。
ディレクトリ一式、差し支えなければ送っていただけると助かります。レジスト
リは前回頂いたものがあるので大丈夫だと思います。
お手数をおかけしますがよろしくお願いします。

[ ]