#5731
Yutaka Emura
キーマスター

shiiyaさんは書きました:
環境
 OS   :WinXP Pro SP2
 EmEditor:7.00.1 Pro 正式版

【再現環境の準備】
以下のコマンドを実行し、UTF-16LEのBOMの有無とファイルサイズの大小が異なるテキストファイルを計4つ作成する。
(使用している外部プログラムの入手先は脚注1参照。)
chcp 932
echo 一二三| nkf.exe –ic=CP932 –oc=UTF-16LE-BOM > BOM付き.小.txt
echo 一二三| nkf.exe –ic=CP932 –oc=UTF-16LE > BOM無し.小.txt
perl cp932all.pl | nkf.exe –ic=CP932 –oc=UTF-16LE-BOM > BOM付き.大.txt
perl cp932all.pl | nkf.exe –ic=CP932 –oc=UTF-16LE > BOM無し.大.txt

【不具合1】自動認識でも読み直しでも、「UTF-16LE (BOM無し)」のエンコードが正しく認識されない
(本不具合の再現に関連すると思われる設定内容は脚注2参照。)
「BOM付き.小.txt」および「BOM付き.大.txt」をダブルクリックで開くと、警告メッセージ等が表示されることなくファイルが開かれます。
画面右下のエンコード欄を見ると、「UTF-16LE (BOM付き)」と認識されています。

しかし、「BOM無し.小.txt」および「BOM無し.大.txt」をダブルクリックで開くと、「ファイルに含まれていた Null文字 (00H) は、スペースに変換して開きます。」という警告メッセージ等が表示され、「OK」を選択するとファイル内容が化けた状態で開かれます。(後者では「改行方法がすべての行で一致していません。」というメッセージが表示されるがそこでも「OK」を選択。)
画面右下のエンコード欄を見ると、間違ったエンコードでそれぞれ「日本語 (シフト JIS)」「日本語 (JIS 1 バイト カタカナ可 – SO/SI)」と認識されています。
次にメニューバーから[ファイル]-[読み直し]-[自動検出]を選択すると、今度はファイル内容をざっと見る限りでは正しく表示されるようになります。
しかし、画面右下のエンコード欄を見ると、相変わらず間違ったエンコードで認識されたままになっています。
任意のファイルを新規に作成し、「名前を付けて保存」ダイアログでエンコードとして「UTF-16LE」、「Unicodeサイン(BOM)を付ける」のチェックは外した状態で保存した時などは、画面右下のエンコード欄を見ると「UTF-16LE (BOM無し)」と認識されるので、読み直し後の上記の間違ったエンコードも「UTF-16LE (BOM無し)」として再認識されるのが正しい動作ではないでしょうか?

【不具合2】「UTF-16LE (BOM無し)」の自動認識の精度が低い
(本不具合の再現に関連すると思われる設定内容は脚注2参照。)
不具合1で記載した「BOM無し.小.txt」のような、ファイル内容のエンコードを自動認識するための手がかりが乏しいサイズの小さなファイルでは、自動認識に失敗するのはある程度仕方がないと思いますが、エンコードを自動認識するために十分と思われるだけの文字集合を詰め込んだ「BOM無し.大.txt」のようなサイズの大きなファイルで自動認識に失敗するのは、何とか改善できないでしょうか?
それとも当方の設定が悪いのでしょうか?

ちなみに脚注2の設定の定義で「すべて自動検出」だけをチェック状態に変更すると(ヘルプを見ると「ファイルが非常に小さい場合は、誤認する場合がある」と書かれているので普段はあまり使いたくはないのですが)、「BOM無し.小.txt」および「BOM無し.大.txt」も文字化けしないで開けるようにはなりますが、画面右下のエンコード欄を見ると、いずれのファイルでも今度は「日本語 (自動選択)」という表示になってしまい、やはりエンコードが正しく認識されていないようなのです。

以上、ご確認願います。

【脚注1】再現環境の準備で使用している外部プログラムの入手先
・nkf.exe
 http://www.vector.co.jp/soft/dl/win95/util/se295331.html
 上記ページの「nkfwin.zip」ファイル(バージョン2.0.8)をダウンロード・展開して得られる「2080win」ディレクトリ内の「nkf.exe」ファイル

・perl
 http://downloads.activestate.com/ActivePerl/Windows/5.8/
 上記ページの「ActivePerl-5.8.8.822-MSWin32-x86-280952.msi」ファイル

・cp932all.pl
 http://www.miraclelinux.com/technet/samba30/cp932_script.html
 上記ページの「cp932all.pl」ファイル

【脚注2】設定の定義「Text」で本現象に関連すると思われる設定内容
[ファイル]タブ
 HTML/XMLのCharsetを検出     □
 すべて自動検出         □
 Unicodeサイン(BOM)を検出    レ
 UTF-8を自動検出         レ
 改行方法が不統一ファイルで警告 レ
 開く時のエンコード       日本語 (自動選択)
 新規作成時
  エンコード          日本語 (シフト JIS)

以上

自動認識というのは、どの設定のことでしょうか? EmEditor の中では自動認識という言葉は使っていません。 [Unicodeサイン(BOM)を検出] をチェックしただけの場合は、BOM無しのファイルは検出できないようになっています。ですからこれは仕様通りの動作になります。今、旅行中のため開発やデバッグができないのですが、もしまだ動作がおかしい場合は、サンプル ファイルを圧縮して添付ファイルで送っていただけますか?よろしくお願いします。 [email protected] 時間があるときに調べてまたご報告します。