[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: 特定のケースで文字コードがJISで保存されてしまい困っています



本題は解決しているようですが枝話をさらに続けちゃいます.

mito> 何か勘違いしていたのかな? 以前、そんな挙動をしていたと思っ
mito> たんですが、今確認したら prefer-coding-system を SJIS にして
mito> EUCのファイルを開いたら化けてしまいました。

 SJIS と EUC は一部重複したコード域を使っているので正しく識別でき
ないことがあります. そういう話じゃないんでしょうか. 特に半角カナ
が入っているとてきめんに利きます.

# たとえば"これは、EUCです。″ (本当は句読点が半角)と書いたファイ
# ルをEUCでセーブして, 読み込むと化けます. "珈琲"でも化ける.

mito> 3. C-x C-f 新規ファイル ;; モードラインは 「-S\--」
mito> 4. abc[Enter]           ;; 改行必須
mito> 5. C-x C-s              ;; モードラインは 「-S\--」
mito> 6. C-x C-v              ;; モードラインは 「--\--」
...
mito> ここまでの挙動はわかるのですが、なぜ 4 で改行をつけなかった
mito> 場合には 6 で「-S\--」になるのでしょう?

 Emacs では基本的にファイルの読み込みの時に文字コード系と改行コー
ド種別の自動判別を試みます.

 'abc'に対しては文字コード系は非決定となり, 改行をつけると改行コー
ドは確定できるので, 改行コードだけが確定されているという 
'undecided-dos というコード系が採用されます.

 一方改行をつけないと改行コードも非決定となって('undecided), ロー
カルの buffer-file-coding-system は設定されません. 結果デフォルト
である default-buffer-file-coding-system の値が使われることになり
ます. ここでは 'japanese-shift-jis-dos .

mito> また、2 を実行しなければ、

 実行しなくても同じ値が入っているはずなんですが..

mito>       These default coding systems were tried:
mito>         undecided-dos iso-2022-jp
mito>       However, none of them safely encodes the target text.
mito> 
mito> のように coding-system を問い合わせてきますが、2 を実行する
mito> とこれがなくなるのはなぜでしょう?

 これは私の手元(2.00pre2)で7の手順で'あ'と入力しても再現しない(勝
手に iso-2022-jp でセーブする)のですが, 7の"日本語"として何を入力
したのでしょうか.

-- 
堀口恭太郎