1

サーバーにテキストファイルがあります。そのファイルをクライアントからダウンロードしています。保存先のファイル パスを指定しましたfi

作成されたテキスト ファイルには、文字列ではなく、醜い文字が含まれています。どうすれば修正できますか?

出力の形式は次のとおりです。

sNULdNULiNULdNUL

テキスト ファイル内の文字が出力され、その後に太字でNULが続きます。これは何ですか、どうすればそれを取り除くことができますか?

FileOutputStream f= new FileOutputStream(fi);

DataOutputStream d= new DataOutputStream(f);

String fc;
while((fc  = re.readLine()) !=null)  
{  
System.out.println(fc);
d.writeChars(fc);
d.flush();

}

アップデート

€À€À€À€À€À€À€À€À€À€À€À€À€À€À€

更新 2

InputStreamReader st= new InputStreamReader(
                    s.getInputStream());
            re= new BufferedReader(st);

そしてこちらですs。として初期化されましたsocketreBufferedReader re;

try {
            s= new Socket("localhost", "2222");
        } catch (IOException ex) {
             ex.printStackTrace();

        }
4

2 に答える 2

0

writeChars各文字を基になる出力ストリームに 2 バイト値として上位バイトから最初に書き込みます。したがって、ストリームにマルチバイト文字がある場合、出力に醜い文字が表示されます。ストリームには適切なエンコーディングを使用してください。

に置き換えd.writeChars(fc);d.writeUTF(fc);みてください。

US-ASCII入力ストリームのエンコードを正しく使用している場合。

InputStreamReader st= new InputStreamReader(
                s.getInputStream(),"US-ASCII");
        re= new BufferedReader(st);
于 2013-01-26T09:58:27.900 に答える
0

文字列をメモリに保存したり、ファイルに書き込んだり、インターネット経由で送信したりする場合は、バイトにエンコードする必要があります。これを行うための多くのエンコーディング システムがあります。

writeCharsは、各文字を 2 バイトとして書き込みます。これは、既に見たとおりです。

writeUTF人間が読めない何かをします:

マシンに依存しない方法で Java 修正 UTF-8 エンコーディングを使用して、基になる出力ストリームに文字列を書き込みます。

最初に、writeShort メソッドによって後続のバイト数が指定されたかのように、2 バイトが出力ストリームに書き込まれます。この値は、文字列の長さではなく、実際に書き出されたバイト数です。長さに続いて、文字の修正された UTF-8 エンコーディングを使用して、文字列の各文字が順番に出力されます。例外がスローされない場合、書き込まれたカウンターは、出力ストリームに書き込まれた合計バイト数だけインクリメントされます。これは、少なくとも 2 に str の長さを加えたものであり、最大で 2 に str の長さを加えた 3 倍です。

大騒ぎせずに文字をファイルに書き込みたい場合は、FileWriterを使用してください。ほとんどの場合、人間が読めるファイルを書き込むための適切なデフォルトを想定しています。

FileWriter fw = new FileWriter(filename);
BufferedWriter bw = new BufferedWriter(fw);

while((fc  = re.readLine()) !=null) {  
    bw.write(fc);
    bw.newLine();
    bw.flush();
}
bw.close();
于 2013-01-26T10:24:30.477 に答える