2015-05-06 3 views
5

Sto utilizzando Java Scanner.Perché questo carattere 口 causa il fallimento del mio scanner?

Ho un file .txt con questo testo salvato in esso.

PriceDB = { 
    ["profileKeys"] = { 
     ["Name - 回音山"] = "Name - 回音山", 
    }, 
    ["char"] = { 
     ["Name - 回音山"] = { 
      ["CurrentValue"] = "一口价:|cffffffff70,197|TInterface\\MoneyFrame\\UI-GoldIcon:0:0:2:0|t|r", 
     }, 
    }, 
} 

Tutto quello che sto cercando di fare è aprire questo file con uno scanner ed estrarre il "CurrentValue" del 70,197 dal file e salvarlo come un int. Tuttavia, ogni volta che il file viene aperto non leggerà una riga e getterà un NoSuchElementException con "No line found" come messaggio. Dopo aver trafficato con il file e rimosso alcuni dei caratteri cinesi uno per uno, l'ho ristretto a questo piccoletto 口. Per qualche ragione, allo scanner non piace quel personaggio. Mi stavo chiedendo se c'è qualche impostazione di codifica che devo cambiare o se userò BufferedReader o cosa ... Non sono sinceramente sicuro di cosa stia succedendo eccetto che c'è un errore di codifica. Quindi cosa sta succedendo qui?

Modifica: ecco l'inizializzazione del mio scanner.

Scanner scanner; 
if (region.equals("US")) { 
       scanner = new Scanner(new File("C:\\Program Files\\World of Warcraft\\WTF\\Account\\313023286#1\\SavedVariables\\WoWTokenPrice.lua")); 
      } else if (region.equals("EU")) { 
       scanner = new Scanner(new File("C:\\Program Files\\World of Warcraft\\WTF\\Account\\313495228#1\\SavedVariables\\WoWTokenPrice.lua")); 
      } else if (region.equals("China")) { 
       File file = new File("C:\\Program Files\\World of Warcraft\\WTF\\Account\\232241227#1\\SavedVariables\\WoWTokenPrice.lua"); 
       System.out.println(file.exists()); 
       scanner = new Scanner(file); 
      } else { 
       System.exit(1); 
       break; 
      } 

Ho appena copiato come è. region == "China"

+1

Vai un esempio dello scanner? Mi interessa se la codifica dei caratteri è impostata in modo appropriato. –

+0

Stai impostando la codifica corretta? Che cos'è la codifica? E qual è il punto di codice Unicode per il "personaggio problematico"? – Thilo

risposta

4

È necessario specificare la codifica corretta durante la creazione di Scanner. Il costruttore:

public Scanner(InputStream source, String charsetName) 

Costruisce un nuovo scanner che produce valori esaminati dal flusso di input specificato. I byte dallo stream vengono convertiti in caratteri utilizzando il set di caratteri specificato.

Find here your charset, credo UTF-16 ma non un esperto in caratteri stranieri :).

Scanner scanner = new Scanner(is, StandardCharsets.UTF-16.toString()); 
+0

Dovrei anche notare che questo file avrà caratteri anche dall'inglese, dalla Corea e da Taiwan (non conosco le lingue lì). UTF-16 supporterà tutti questi pensieri? – david2278

+0

[Controlla qui] (http://a4esl.org/c/charset.html) –

+1

La codifica UTF-16 codifica Unicode, quindi può ovviamente memorizzare i caratteri di qualsiasi lingua nello standard Unicode, che copre la maggior parte delle lingue al giorno d'oggi. [Il minimo assoluto Ogni sviluppatore di software deve assolutamente conoscere positivamente Unicode e Set di caratteri (nessuna scusa!)] (Http://www.joelonsoftware.com/articles/Unicode.html) –