web-dev-qa-db-ja.com

Notepad ++はバイトオーダーマークなしでUTF-16ファイルとして保存します

UTF-16エンコーディング(リトルエンディアン)を使用して、バイトオーダーマークを追加せずにNotepad ++でファイルを保存する方法はありますか?たとえば、テキストファイルをリトルエンディアンのUTF-16エンコーディング(Encoding > UCS-2 LE BOM)を使用してnotepad ++で保存すると、バイトFF FEが先頭に追加されますが、これを削除する必要はありません。手動で行います。

デフォルトでこれを行う方法がない場合、UCS-2 LE BOMオプションと同じであるNotepad ++のエンコーディングを、バイトオーダーマークなしで作成できる方法はありますか?

1
TheTVGuy

First、Notepad ++はUTF-16もサポートしていません。それは(それが言うように)UCS-2です。ただし、UTF-16はUCS-2と下位互換性がありますが、これら2つは同じではありません。 UCS-2は常に文字(CodePoints)を2バイト以内に保存します。しかし、UTF-16は、UCS-2の後継として、文字あたりのビット数を2倍以上にすることができる、いわゆるサロゲートペアを導入しました。

これを視覚化する良い方法は、UCS-2ファイルの範囲外の文字でファイルを作成することです。たとえば、絵文字(????など)を試してください。これをテキストファイルに貼り付け、Notepad ++を使用してUCS-2ファイルとして保存します。その後、再度開きます。エンコーディングがサポートしていないため、文字は正しく表示されなくなります。

次に、Windowsのメモ帳など、UTF-16をサポートするエディターで同じことを行います。 Notepad ++とは異なり、UTF-16ファイルとして保存すると、保存して再度開いた後も文字は表示されたままになります。

2番目、UTF-8以外のテキストファイルからBOMを削除する正当な理由はありません。これは、エンコーディングがファイル内に明示的に保存されていないため、テキストエディタは通常ファイルをスキャンしてBOMを探し、エンコーディングをチェックするためです。したがって、テキストエディターは推測する必要があり、最も正確な方法はBOMによるものです。 BOMは、基本的にテキストファイルのヘッダーです。それを削除することは悪い考えです。

1
RobinLe