在 Java 中使用 DataOutputStream 提供了一些中文输出

Using DataOutputStream in Java gives some Chinese output

我今天在 Java 中使用 DataOutputStream,但它给了我一个中文输出,这绝对不是我所期望的...有人可以找出代码中的错误吗?

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();
    }
}

TitleBoxJComboBoxFirstNameFieldLastNameFieldClassFieldJTextField的。 TextAreaJTextArea.

当我在 TitleBox 中选择 "Mr." 时,在 FirstNameField 中键入 "Man",在 LastNameField 中键入 "Ly",在 ClassField,我得到输出:

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

在 TextArea 中,但在文件中,IDCard.txt,我得到输出:

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

textToSet 是在 public 范围内定义的 String 变量...有人可以指出我正确的方向吗? writeUTF()代码有问题吗?

writeUTF 方法包括 header 数据(你所谓的汉字)关于它要写多长时间的字符串(2 个字节,所以 0-65535)。您只能使用 readUTF 正确读取该数据,它不适用于一般的文本书写。

只需使用常规 BufferedWriter.write(String str) 来代替编写文本。