Problème du code des ordures en java
Récemment, lorsque je fais des projets, je rencontre souvent des problèmes de code brouillé en Java, j'ai donc pris le temps de trier les problèmes de code brouillé et comment les gérer. Ici, je les ai compilés.
analyser
Codage et décodage
L'encodage consiste à convertir des caractères en octets et à décoder consiste à convertir les octets en caractères.
Flux d'octets et flux de personnages
Les fichiers de lecture et d'écriture sont tous implémentés via des flux BYTE. Même s'il y a un flux de caractères en Java, la couche sous-jacente utilise toujours le flux d'octets.
Le problème du code des ordures se produit
Les personnages les plus fréquemment utilisés de Java sont des personnages. Lorsque nous lisons le fichier dans la mémoire et l'avons affiché dans la console (flux d'octet ---> Stream de caractères), nous devons utiliser le décodage. Si le fichier est un codage UTF-8 et que nous l'abusons à GBK lors du décodage (si le codage n'est pas spécifié, Java adoptera le codage par défaut du système) pour le décoder, alors seul le code brouillé peut être affiché. Lorsque nous écrivons des fichiers, il est préférable de spécifier le codage (UTF-8).
Solution
Exemple 1
Lors de la conversion d'un flux d'octets en flux de caractères, nous spécifions le format de codage. Ceci est notre fichier devrait également être codé par GB2312
Public Static String Read (String FileName) lève Exception {InputStream est = new FileInputStream (FileName); BufferedReader dans = new BufferedReader (new InputStreamReader (IS, "GB2312")); // Spécifiez la chaîne de format de codage s; StringBuilder sb = new StringBuilder (); while ((s = in.readline ())! = null) {sb.append (s + "/ n"); } in.close (); return sb.toString ();} Exemple 2
Lisez directement via le flux d'octets et spécifiez le codage lors de la convertification en caractères à l'aide de la chaîne.
package com.dy.xidian; import java.io.fileInputStream; import java.io.inputStream; class bufferedInputFile {public static String read (string fileName) lève exception {@suppresswarnings ("ressource") inputStream is = new FileInputStream (filename); octet [] b = nouveau octet [1024]; is.read (b); return new String (B, "GB2312"); }} public class MemoryInput {public static void main (String [] args) lève l'exception {String filename = "e: /html/gb2312.php"; String s = bufferedInputFile.read (nom de fichier); System.out.println (s); }}piège
Il y a une classe FileReader dans les opérations d'E / S. Cette classe cache les détails du streaming d'octets dans les flux de caractères, que nous pouvons utiliser de cette manière. BufferedReader dans = new BufferedReader (nouveau FileReader (nom de fichier)); De cette façon, nous obtenons directement le flux de personnage. Mais nous avons constaté que nous n'avons pas défini le codage, car la méthode de codage par défaut est adoptée dans FileReader. Cela devient très dangereux. Si son format de codage par défaut est différent de l'encodage de notre fichier, les données de lecture doivent être brouillées. Nous ferions donc mieux d'utiliser la méthode dans l'exemple pour convertir le flux.
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!