简体   繁体   中英

Using DataOutputStream in Java gives some Chinese output

I was using DataOutputStream in Java today, but it gave me a Chinese output, that was absolutely NOT what I had expected... Can someone please spot the error in the code?

private void generateButtonActionPerformed(java.awt.event.ActionEvent evt) {
    textToSet="       Student Information";
    textToSet=textToSet+"\nName\t: "+TitleBox.getSelectedItem()+" "+FirstNameField.getText()+" "+LastNameField.getText();
    textToSet=textToSet+"\nClass\t: "+ClassField.getText();
    TextArea.setText(textToSet);
}

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    try{
        File f=new File("C:\\Users\\username\\Desktop\\ID Card.txt");
        DataOutputStream fs=new DataOutputStream(new BufferedOutputStream(new FileOutputStream(f)));
        fs.writeUTF(textToSet);
        Desktop d=Desktop.getDesktop();
        d.open(f);
        fs.close();
    }
    catch(Exception e){
        e.printStackTrace();
    }
}

TitleBox is a JComboBox , FirstNameField , LastNameField , and ClassField are JTextField 's. TextArea is a JTextArea .

When I choose "Mr." in TitleBox , type "Man" in FirstNameField , "Ly" in LastNameField and "7th" in ClassField , I get the output:

       Student Information
Name    : Mr. Man Ly
Class   : 7th

in the TextArea, but in the file, IDCard.txt, I get the output:

㠀†††匠畴敤瑮䤠普牯慭楴湯上浡॥›牍‮慍祌䌊慬獳㨉㜠桴

textToSet is a String variable defined in the public scope... Can someone point me in the right direction? Is there something wrong with the writeUTF() code?

The writeUTF method includes header data (your so called chinese characters) about how long a String it's going to write (2 bytes, so 0-65535). You can only use readUTF to read that data properly, it's not meant for general text writing.

Just use a regular BufferedWriter.write(String str) to write the text instead.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM