2017-09-19 6 views
2

J'utilisais DataOutputStream en Java aujourd'hui, mais ça me donnait une sortie en chinois, ce n'était absolument PAS ce que je m'attendais ... Quelqu'un peut-il repérer l'erreur dans le code?L'utilisation de DataOutputStream en Java donne une sortie chinoise

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 est un JComboBox, FirstNameField, LastNameField et ClassField sont JTextField « s. TextArea est un JTextArea.

Quand je choisis "M." dans TitleBox, tapez « homme » dans FirstNameField, « Ly » dans LastNameField et « 7 » en ClassField, je reçois la sortie:

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

dans le TextArea, mais dans le fichier, IDCard.txt, je reçois la sortie:

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

textToSet est une variable String définie dans la portée du public ... quelqu'un peut-il me diriger dans la bonne direction? Y at-il un problème avec le code writeUTF()?

Répondre

6

La méthode writeUTF inclut des données d'en-tête (vos soi-disant caractères chinois) sur la durée d'écriture d'une chaîne (2 octets, donc 0-65535). Vous pouvez seulement utiliser readUTF pour lire ces données correctement, ce n'est pas fait pour écrire du texte en général. Utilisez simplement un BufferedWriter.write(String str) normal pour écrire le texte à la place.

+0

Cela a fonctionné !!! Merci pour la réponse claire et concise. – AbhigyanC