Kódování textu [Netb – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kódování textu [Netb – Java – Fórum – Programujte.comKódování textu [Netb – Java – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
avalagne0
Newbie
3. 4. 2012   #1
-
0
-

Ahoj,

pracuji na bakalářské práci a nemůžu přijít na řešení kódování textu. Zjednodušeně popíšu, co provádím:

1) načtu soubor (ať už .txt nebo .java)

2) vypisuji ho do JTextArea

Objevil jsem však problém, že ze souboru .java se mi v JTextAreA špatně zobrazuje čeština. U souboru .txt s původním nastavením ANSII je to v pořádku.

Zkoušel jsem hledat na googluřešení, ale našel jsem pouze řešení na úrovni konfiguračních souborů prostředí (programuji v Netbeans)... To mi však nepomůže. Pro bakalářskou práci si představuji o něco vyšší úroveň programu, kde bych měl v pořádku načíst i naše háčky a čárky.

Moc děkuji za pomoc,

avalagne

Nahlásit jako SPAM
IP: 85.13.126.–
JoDiK
~ Anonymní uživatel
987 příspěvků
4. 4. 2012   #2
-
0
-

#1 avalagne
soubor .TXT je v jakém kódování? Win1250? UTF-8? UTF-16? ...

soubor .java je v jakém kódování? Win1250? UTF-8? UTF-16? ...

Tady bych hledal chybu...

Nahlásit jako SPAM
IP: 88.103.236.–
avalagne0
Newbie
4. 4. 2012   #3
-
0
-

#2 JoDiK
Určitě to je chyba v kódování. Podle mě je chyba ve způsobu čtení...

Vytvořil jsem si 4 dokumenty, ve kterých se objevují háčky a čárky s 4 druhy kódování - Unicode, Unicode big endian, UTF-8 a ANSII... Ani jedno mi nepřečte češtinu korektně v JTextAree v Netbeans. V jakém kódování se ukládá .java soubor v Netbeans netuším... Ani se mi to v nastavení Netbeans nepodařilo najít.

Už si nevím rady. Myslel jsem, že v .txt mi to aspoň přečte správně, ale neměl jsem to správně otestované. Takže výsledkem je, že mi čeština v JTextAree nefunguje v žádném způsobu kódování...

Děkuji za jakékoliv rady,

avalagne

Nahlásit jako SPAM
IP: 78.128.155.–
Antilles0
Stálý člen
4. 4. 2012   #4
-
0
-

Podle mě je chyba ve způsobu čtení z toho souboru. Takhle z hlavy mě napadá jen použití něčeho takovéhleho:

FileInputStream f = new FileInputStream("soubor");
InputStreamReader i = new InputStreamReader(f,"UTF-8");
BufferedReader bf = new BufferedReader(i);

String line = "";
while((line = bf.readLine()) != null){
	//čtení
}

//pozavírání streamů

Vyzkoušejte to, snad to pomohlo.

Nahlásit jako SPAM
IP: 77.48.30.–
Dejte mi flétnu a já budu hrát, dejte mi Javu a já budu psát.
avalagne0
Newbie
4. 4. 2012   #5
-
0
-

#4 Antilles
Děkuji za námět. Nepodařilo se mi však najít správnou metodu, kterou bych aplikoval v mém kódu podle Vás...

Zde je můj kód, který funguje pro načítání více souborů. Co načtený soubor, to nové okno...

private void buttonNactiSouborActionPerformed(java.awt.event.ActionEvent evt) {                                                  
        // vyber souboru
        JFileChooser fc = new JFileChooser();
        // povoleni vybrani vice souboru pri vyberu
        fc.setMultiSelectionEnabled(true);
        int navratHodnota = fc.showOpenDialog(this);

        if (navratHodnota == JFileChooser.APPROVE_OPTION) {
            // nacteni vybranych souboru
            File[] soubory = fc.getSelectedFiles();
            FileInputStream fis = null;
            File soubor;

            // nacitani jednotlivych souboru po pismenech
            for (int i = 0; i < soubory.length; i++) {
                soubor = soubory[i];
                JTextArea nactenyKod = new JTextArea();  
                JScrollPane rolovaniSouboru = new JScrollPane();
                rolovaniSouboru.setViewportView(nactenyKod);
                // pridani nove zalozky s nactenym souborem
                tabbedPaneUML_Kod.addTab("" + soubor.getName(), rolovaniSouboru);                

                int ch;
                try {
                    fis = new FileInputStream(soubor);

                    while ((ch = fis.read()) != -1) {
                        nactenyKod.append(Character.toString((char) ch));
                    }
                    // nastaveni rolovaciho tlacitka na pocatek
                    nactenyKod.setSelectionStart(0);
                    nactenyKod.setSelectionEnd(0);
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(HlavniOkno.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(HlavniOkno.class.getName()).log(Level.SEVERE, null, ex);
                }                
            }
        }
    }

Za případné další nápady moc děkuji!

P.S.: Potřebuji načítat písmeno po písmenu z důvodu mé práce. Nemohu tedy použít (možná pouze nevím jak) InputStreamReader, kde bych mohl kódování ovlivnit...

Nahlásit jako SPAM
IP: 83.208.55.–
Řešení
avalagne0
Newbie
5. 4. 2012   #6
-
0
-
Vyřešeno Nejlepší odpověď

Tak jsem dnes opět hledal řešení a nakonec to bylo velice jednoduché. Přikládám kód, se kterým mi funguje čeština.



// vyber souboru
        JFileChooser fc = new JFileChooser();
        // povoleni vybrani vice souboru pri vyberu
        fc.setMultiSelectionEnabled(true);
        int navratHodnota = fc.showOpenDialog(this);

        if (navratHodnota == JFileChooser.APPROVE_OPTION) {            
            // nacteni vybranych souboru
            File[] soubory = fc.getSelectedFiles();            
            File soubor;

            // nacitani jednotlivych souboru po pismenech
            for (int i = 0; i < soubory.length; i++) {
                soubor = soubory[i];
                JTextArea nactenyKod = new JTextArea();  
                JScrollPane rolovaniSouboru = new JScrollPane();
                rolovaniSouboru.setViewportView(nactenyKod);
                // pridani nove zalozky s nactenym souborem
                tabbedPaneUML_Kod.addTab("" + soubor.getName(), rolovaniSouboru);                

                int ch;
                try {    
                    // vytvoreni Readeru pro cteni souboru ve vybrane znakove sade
                    Reader cteckaZnaku = new InputStreamReader(new FileInputStream(soubor), "UTF-8");

                    while ((ch = cteckaZnaku.read()) != -1) {
                        nactenyKod.append(Character.toString((char) ch));
                    }
                    // nastaveni rolovaciho tlacitka na pocatek
                    nactenyKod.setSelectionStart(0);
                    nactenyKod.setSelectionEnd(0);
                } catch (FileNotFoundException ex) {
                    Logger.getLogger(HlavniOkno.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IOException ex) {
                    Logger.getLogger(HlavniOkno.class.getName()).log(Level.SEVERE, null, ex);
                }                
            }
        }

Děkuji všem za pomoc!  

Nahlásit jako SPAM
IP: 83.208.55.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý