ホームページ  >  記事  >  Java  >  dataoutputstream が文字化けした場合はどうすればよいでしょうか?

dataoutputstream が文字化けした場合はどうすればよいでしょうか?

藏色散人
藏色散人オリジナル
2023-01-05 11:28:5330500ブラウズ

dataoutputstream の文字化けの解決策: 1. "dos.write("...".getBytes());"; を通じて文字列を書き込みます 2. "new OutputStreamWriter(new FileOutputStream(file), "utf- 8");" で十分です。

dataoutputstream が文字化けした場合はどうすればよいでしょうか?

#このチュートリアルの動作環境: Windows 10 システム、Java バージョン 8.0、Dell G3 コンピューター。

dataoutputstream が文字化けしている場合はどうすればよいですか?

DataOutputStream 文字化け問題を解決します

まずはこの罠を踏んで、大事なことは3回言います!

DataOutputStream の writeBytes メソッドは絶対に使用しないでください

DataOutputStream の writeBytes メソッドは絶対に使用しないでください

Thousands 絶対に使用しないでくださいDataOutputStream の writeBytes メソッド

DataOutputStream を使用する場合、たとえば String を書き込む場合、3 つのメソッドが表示されます

public final void writeBytes(String s)
public final void writeChars(String s)
public final void writeUTF(String str)

OK 、次に同じ内容を書き込んでもう一度読み取ろうとした場合、

File file = new File("d:"+File.separator+"test.txt");
   DataOutputStream dos = new DataOutputStream(new FileOutputStream(file));
   dos.writeBytes("你好");
   dos.writeChars("你好");
   dos.writeUTF("你好");
   dos.flush();
   dos.close();
   
   DataInputStream dis = new DataInputStream(new FileInputStream(file));
   byte[] b = new byte[2];
   dis.read(b);
            //  `}
   System.out.println(new String(b, 0, 2));
   
   char[] c = new char[2];
   for (int i = 0; i < 2; i++) {
    c[i] = dis.readChar();
   }
            //你好
   System.out.println(new String(c, 0, 2));
   //你好
   System.out.println(dis.readUTF());

はい、正しく読みました。writeBytes メソッドで書き込まれた内容が読み上げられます。文字化けするのはなぜですか?

クリックして実装を確認してください

public final void writeBytes(String s) throws IOException {
        int len = s.length();
        for (int i = 0 ; i < len ; i++) {
            out.write((byte)s.charAt(i));
        }
        incCount(len);
    }

お兄さん、この char 型は強制的に byte 型に変換されており、精度が失われています。返されるので、便宜上欲張らず、 dos.write("Hello".getBytes()); に置き換えるだけで問題ありません。

DataOutputStream は文字化けしたデータを txt ファイルに書き込みます

これは正常です。読み取りたい場合は DataInputStream を使用して読み取り、テキスト ファイルとして保存するだけの場合は、FileOutputStream または PrintWriter を直接使用してください

OutputStreamWriter oStreamWriter = new OutputStreamWriter(new FileOutputStream(file), "utf-8");
oStreamWriter.append(str);
oStreamWriter.close();

主な理由エンコード方法が異なるということです

バイト ストリームの代わりに文字ストリームを使用します

#BufferedReader クラスは、文字入力ストリームからテキストを読み取り、文字をバッファリングして、文字、配列、行を効率的に読み取ることができます。

推奨学習: 「

Java ビデオ チュートリアル

以上がdataoutputstream が文字化けした場合はどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。