9

このコード、

OutputStream out = new FileOutputStream(new File("C:/file/test.txt"));
out.write("A".getBytes());

この、

OutputStream out = new FileOutputStream(new File("C:/file/test.txt"));
out.write("A".getBytes(StandardCharsets.UTF_8));

BOMなしのUTF-8である(私の意見では)同じ結果を生成します。ただし、Notepad++ には encoding に関する情報が表示されません。ここに notepad++ が として表示されることを期待していますEncode in UTF-8 without BOMが、「エンコード」メニューでエンコードが選択されていません。

ここで、このコードは BOM エンコーディングを使用して UTF-8 でファイルを書き込みます。

 OutputStream out = new FileOutputStream(new File("C:/file/test.txt"));
 byte[] bom = { (byte) 239, (byte) 187, (byte) 191 };
 out.write(bom);
 out.write("A".getBytes()); 

Notepad++ もエンコード タイプを として表示していEncode in UTF-8ます。

質問: BOM なしの UTF-8 でファイルを書き込むと想定されている最初の 2 つのコードの何が問題になっていますか? 私のJavaコードは正しいことをしていますか? もしそうなら、notepad++ がエンコーディング タイプを検出しようとしていることに問題はありますか?

notepad ++は推測だけですか?

4

2 に答える 2

0

私の答えが正しいかどうかはわかりませんが、ここで私の理解を述べさせてください。

上で説明したように、単に「A」と書くと、notepad++ はそれがどのタイプのエンコーディングであるかを理解する方法がありませんが、下の図に示すように、notepad++ に「BOM なしの UTF-8 でエンコード」を表示させたい場合

ここに画像の説明を入力

次に、次のコードを使用してメモ帳++をだます必要があります ここに画像の説明を入力

notepad++ に「Encode in UTF-8」を表示させたい場合は、osw.write("\uFEFF") から部分文字列部分を削除する必要があります。これは、挿入しようとしている BOM 文字であるためです。この文字を挿入すると、ファイルのエンコード タイプは「UTF-8 にエンコード」になり、プログラムで削除すると、この BOM 文字を削除したため、「BOM なしで UTF-8 にエンコード」になります。

あなたがしなければならないもう1つの設定は、以下に示すようにNotepad ++の設定を変更することです.これを行うことによってのみ、Notepad ++はあなたが望むエンコーディングを認識できるようになります.

ここに画像の説明を入力

ただし、単純にテキストを記述すると、notepad++ によって "ANSI" として扱われます。

私の説明が明確で、私の分析が誰かの役に立てば幸いです。ただし、このアプローチは回避策であり、推奨されていませんが、無力なシナリオではこれが機能します。

Notepad++ 設定を変更したくないが、エンコーディングを「BOM なしの UTF-8 でエンコード」にしたい場合は、次のようにする必要があります。

ここに画像の説明を入力

ここのブログでおそらくより良い方法でsamethingを説明しました

于 2014-04-08T04:17:33.523 に答える