9
votes

Lire / écrire un fichier .Text avec des caractères spéciaux

J'ouvre Notepad Strong> (Windows) et écrivez

FileInputStream fis = new FileInputStream(new File(fileName));
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
BufferedReader in = new BufferedReader(isr);

String line;
while((line = in.readLine()) != null) {
    Toast.makeText(mContext, line, Toast.LENGTH_LONG).show();

    Pattern p = Pattern.compile(",");
    String[] article = p.split(line);

    Toast.makeText(mContext, article[0], Toast.LENGTH_LONG).show();
    Toast.makeText(mContext, Integer.parseInt(article[0]), Toast.LENGTH_LONG).show();
}
in.close();


5 commentaires

Qu'est-ce qui est dans cette fonction printline (ligne)?


tandis que ((ligne = in.readline ())! = null) - Java vous permet-il même de faire cela? Je pensais en Java, les affectations n'étaient pas considérées comme des expressions ...


@Will Printline l'imprime simplement à mon débogueur (Eclipse) - dans ce cas, la deuxième ligne devient "01-04 20: 01: 23.394: Verbose / Ligne (32246): Spécial: Žäå¡ää"


tandis que ((ligne = in.readline ())! = NULL) - Oui, vous pouvez faire cet ERIC. La condition que la boucle tandis que la boucle est évaluée est (a! = Null) où a est le résultat de la lecture d'une ligne de la circulation.


En fait, mon problème est peu différent réellement mon nom de fichier est žđšćč et j'ai eu une erreur d'erreurInputtream FIS = nouveau fichierInputtream (nouveau fichier ("žđšćč.txt")); Aide Plzz


6 Réponses :


0
votes

Le bloc-notes peut ne pas être capable de gérer des caractères non-ASCII. Essayez un autre éditeur de texte. Si vous souhaitez coller à ce qui est disponible dans Windows Install, essayez WordPad.


2 commentaires

Il a choisi UTF-8 dans l'option Save AS de Blotessad.


Si j'utilise WordPad et que je l'enregistre comme "Text-Document", il échoue à la 2e ligne. Si j'utilise le format de texte Unicode, il se bloque au début.



2
votes

Votre code a l'air droit - mais une erreur très courante, et facile, est de confondre ce qui est imprimé à l'écran de ce qui est dans la chaîne. Vérifiez auprès d'un débogueur si la chaîne n'est pas déjà lue correcte.


0 commentaires

17
votes

C'est la console de sortie qui ne prend pas en charge ces caractères. Puisque vous utilisez Eclipse, vous devez vous assurer qu'il est configuré d'utiliser UTF-8 pour cela. Vous pouvez le faire par fenêtre> Préférences> Général> Espace de travail> Encodage de fichier texte> défini sur UTF-8 em>.

Voir aussi: h3>
  • Unicode - Comment obtenir les caractères ? li> ul>

    update strong> selon la question mise à jour et les commentaires, apparemment le UTF-8 BOM est le coupable. Notepad par défaut ajoute la nomenclature UTF-8 sur Enregistrer. On dirait que le JRE sur votre HTC n'envolie pas ça. Vous voudrez peut-être envisager d'utiliser l'exemple unicodereader code> comme indiqué dans Cette réponse au lieu de INPUTStreamReader code> dans votre code. Il autodétecte et saute la naissance. P>

    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new UnicodeReader(new FileInputStream(fileName), "UTF-8"));
        // ...
    } finally {
        if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {}
    }
    


4 commentaires

Ce n'est pas parce que mon insert SQLite ne fonctionne pas aussi. Si je saisis manuellement (sur mon désir HTC) comme entrée "žđšćč" et transmettez-la à insérer une déclaration - cela fonctionne bien. Si je, cependant, utilisez la fonction de lecture pour lire ces mêmes caractères de mon fichier .txt - crash. Donc, ce n'est pas seulement la sortie de la console. Autre chose?


J'ai mis à jour le code ci-dessus ... Je ne sais vraiment pas ce que le diable se passe = /


Est-ce que cela ressemble maintenant à la console de sortie ou non? Une autre cause peut être que votre pilote JDBC SQLite et / ou DB ne traite pas les caractères comme UTF-8.


Voici une réponse partielle - Stackoverflow.com/questions/4599061/ Impossible à analyser-as-interne . Document (fichier .txt) est UTF-8, mais pourquoi mon lecteur ne le lit pas comme UTF-8?



0
votes
"Not all sequences of bytes are valid UTF-8."
Seehttp://en.wikipedia.org/wiki/UTF-8under "Invalid byte sequences" for specific details.

0 commentaires

1
votes

Notepad ne sauve pas correctement les symboles spéciaux. J'ai eu un problème similaire et j'ai utilisé Notepad ++ à la place et sélectionné UTF-8 coding à partir de là. Quand je l'ai fait cela, mon programme ne s'est plus écrasé lors de l'application des méthodes de bibliothèque de chaîne, contrairement à la création du fichier texte dans le bloc-notes.


0 commentaires

0
votes

Utilisez-vous le caractère la conversion dans le cadre de la demande de servlet / réponse? Si oui, request.SetCoding ("utf-8")
ou de
réponse.setcharacterencoding ("utf-8")

devrait résoudre votre but.


0 commentaires