Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Pb de caractères accentués

Fichier .txt

Sujet résolu
    7 mai 2012 à 10:19:34

    Sur Java-Android :

    Je veux afficher une liste de lignes txt à partir d'un fichier source .txt.
    Les caractères sont correctement affichés dans le fichier source "dvd.txt" codé en "ISO-8859-1"
    mais ils ne le sont plus dans la liste à afficher après le passage par le "BufferedReader ".
    Ainsi au debugger dans la string "ligne" à la place de "é" "è" "à" "ï" j'obtiens des "?" (cf. ligne 18 du code JAVA)

    Sur la ligne 19 du code JAVA,ci-dessous, la string "ligne" contient la ligne txt source avec les caractères accentués tous changés en "?"
    par exemple :
    La ligne source dans "dvd.txt" est
    "0004~La déchirure~Roland Joffé,Sam Waterston,Guerre, Politique, Dramatique, Cinéclub"
    Le résultat après lecture à la ligne 18 donne dans la string "ligne" :
    "0004~La d?chirure~Roland Joff?,Sam Waterston,Guerre, Politique, Dramatique, Cin?club"

    La même ligne affectée directement dans le code en "dur" dans la string "ligne" est restitués sans aucun pb.


    Par ailleurs :
    Tous mes fichiers de présentation .XML sont
    <?xml version="1.0" encoding="ISO-8859-1"?>
    au cas où ... je mets le fichier .xml qui affiche la liste mais les caractères accentués écrits en "dur" passent sans pb.

    MERCI POUR VOTRE AIDE.

    ------------------------------------



    //charger le fichier dvd.txt et mettre dans les tableaux : réf,titre,thème
        public void doLoad_Fichier_TXT() {
        	
        	
        	//chargement du fichier dvd.txt
        	ArrayList<String> liste_enreg = new ArrayList<String>();	
    		try {
    			//dvd.txt est codée en "ISO-8859-1" dans une ressource "Assets" sur Eclipse
                            //Les lignes sont correctement accentuées : 
                            //ex d'une ligne txt : "0004~La déchirure~Roland Joffé,Sam Waterston,Guerre, Politique, Dramatique, Cinéclub"
    			AssetManager assetManager = getAssets();									
    			BufferedReader data = new BufferedReader(
    			   new InputStreamReader(assetManager.open("dvd.txt")));
    						
    			
    			String ligne =""; nb_enreg=1;			
    						
    			while((ligne = data.readLine()) != null ){
    				liste_enreg.add(ligne);//les caractères ne sont plus accenntués
    				 nb_enreg++;//j'obtiens un "?" à la place des "é" "è" ... ici "La d?chirure" , "Joff?" et "cin?"
    			}
    			
    			data.close();
    			
    			//mise en tableau
    	  		ref = new String[nb_enreg+1];
    	  		titre = new String[nb_enreg+1];
    	  		theme = new String[nb_enreg+1];
    	  		sel_enreg=new boolean[nb_enreg+1];
    	  		
    	  		for(int i=1; i<=nb_enreg+1;i++)
    	  		{
    	  			ligne = liste_enreg.get(i-1);
    	  			ref[i] = ligne.substring(0,4);
    	  			int a = ligne.indexOf("~");
    	  			int b = ligne.indexOf("~",a+1);
    	  			titre[i] = ligne.substring(a+1,b);
    	  			theme[i] = ligne.substring(b+1);
    	  		}
    	  		
    	 			
    		} catch (IOException e) {
    			afficheToast("IOException");
    		} catch(java.lang.NullPointerException e) {
    			e.printStackTrace();
    			afficheToast("NullPointer");
    		} catch (java.lang.RuntimeException e) {
    			e.printStackTrace();
    		}
    		
    		//afficheToast("Chargement terminé !");
    		
    	}//fin de Load_Fichier_TXT()
    
    }
    


    ---------Le code XML

    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    	android:orientation="vertical"
    	android:layout_width="fill_parent"
    	android:layout_height="fill_parent">
    
        <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
    
            <TextView
                android:id="@+id/textView1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="left|center_horizontal"
                android:text="N° : "
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textStyle="bold" />
    
        </LinearLayout>
        
       <ImageView
           android:id="@+id/imageView1"
           android:layout_width="wrap_content"
           android:layout_height="481dp"
           android:src="@drawable/im_dvdtek" />
        
    </LinearLayout>
    
    • Partager sur Facebook
    • Partager sur Twitter
      8 mai 2012 à 15:25:51

      Bonjour,

      le plus simple serait de tout mettre en utf-8 non?
      • Partager sur Facebook
      • Partager sur Twitter
        9 mai 2012 à 7:31:39

        J'ai tout essayé et bien sûr en tout premier le UTF-8.
        • Partager sur Facebook
        • Partager sur Twitter
          25 juin 2012 à 20:10:42

          Salut Smalabob :)

          Je passais par ici pour le même problème et la solution consiste non pas à modifier l'encodage de ton fichier, mais à dire à Java quel encodage utiliser lorsqu'il lit (et donc décode) le fichier.

          Voici la solution que j'ai mise en place dans mon appli Android. J'utilise un Scanner pour parcourir mon fichier, c'est un peu plus agréable qu'un BufferedReader et tout le tralala ;)

          final InputStream resource = DeckHelper.class.getResourceAsStream(file);
          final Scanner reader = new Scanner(resource, "ISO-8859-1");
          while (reader.hasNextLine()) {
          	loadCard(reader.nextLine(), deck, ignoreCardCount);
          }
          


          Moi j'utilise des fichiers créés tout simplement sous Eclipse dont l'encoding (par défaut) est Cp1252
          Image utilisateur
          et ça marche nickel :D J'ai bien des "Trésor" dans mon appli et non plus des "Tr?sor".

          J'espère que ça t'aidera ! ^^
          • Partager sur Facebook
          • Partager sur Twitter
            26 juin 2012 à 23:32:31

            Super ça marche ! t'es un tr?sor euh non un trésor !
            • Partager sur Facebook
            • Partager sur Twitter

            [Android] Pb de caractères accentués

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown