2016-12-25 4 views
0

Il y a quelque chose d'étrange dans mon code. J'essaie d'ouvrir un fichier et d'y ajouter une chaîne générée (qui est basée sur l'heure), afin qu'elle puisse être utilisée plus tard. Dans mon application, cela se produit plus d'une fois, mais de toute façon, cette fois, cela ne me donne pas le résultat que j'aimerais voir. Pour clarifier:Android OutputStreamWriter écrit des caractères non-UTF-8

J'utilise le code suivant dans ma classe:

try { 
    OutputStreamWriter oos = new OutputStreamWriter(context.openFileOutput(ARRANGED_TXT, Context.MODE_PRIVATE)); 

    oos.write(ArrangedTxtAsString); 

    oos.close(); 
} 
catch(FileNotFoundException e){ 
    Log.e("File Error", "File not found: " + e.toString()); 
} 

et ARRANGED_TXT étant défini comme:

private static final String ARRANGED_TXT = "arranged_txt.txt"; 

ArrangedTxtAsString est une chaîne qui ressemble à ceci:

Banana 
Pineapple 
Orange 
Coconut 
Strawberry 

Il a été créé à l'aide d'un StringBuilder.

Maintenant, le problème est, est que le fichier généré ressemble à ceci:

enter image description here

Ce n'est pas un problème avec notepad ++, comme d'autres programmes donnent le même résultat. Une chose importante à mentionner, c'est que bien que le texte ressemble à des caractères non-UTF-8, il est parfaitement traité par le reste du programme. Cela peut sembler un peu bizarre, mais ce que j'essaie de dire, c'est que le code fonctionne bien, mais le seul problème est que le texte affiché à travers un éditeur de texte ne correspond pas à ce qu'il devrait ressembler. Vous voyez, je suis plutôt perfectionniste et c'est pourquoi je veux que ça se règle. Cela pourrait aussi être un problème dans le futur (débogage, etc.).

Edit:

Il semble que peu importe ce que la chaîne contient: un seul caractère, un certain nombre, ou que ce soit; ça donne exactement le même résultat. Même en écrivant "" résultats dans ces caractères étranges! J'espère vraiment que quelqu'un sait ce qui se passe ici! Merci d'avance.

+0

vouliez-vous dire 'oos.write (ArrangedTxtAsString.toString());'? – Natecat

+0

'ArrangedTxtAsString' devrait déjà être une chaîne, car elle est définie comme' ArrangedTxtAsString = stringBuilder.toString(); ', où' stringBuilder' est juste une instance d'un 'StringBuilder'. Sachant cela, ce n'est pas une grosse surprise que ça ne marche pas non plus. En tout cas, j'apprécie vraiment votre aide! ;) – PythonPupil1906

+0

'OutputStreamWriter' n'est pas vraiment adapté à la sortie du texte, vous devriez utiliser un' BufferedWriter' à la place – Natecat

Répondre

0

Si vous devez écrire UTF-8 DOIT utiliser le constructeur avec charset comme:

OutputStreamWriter oos = new OutputStreamWriter(context.openFileOutput(ARRANGED_TXT, Context.MODE_PRIVATE),"UTF-8"); 

OutputStreamWriter(OutputStream out, String charsetName)

Sinon, l'encodage par défaut est utilisé et non est utf-8 dans tous les systèmes

+0

Je crains que cela ne fonctionne pas non plus: je reçois exactement les mêmes caractères. Néanmoins, merci pour votre temps! :) – PythonPupil1906