2015-05-06 3 views
5

Java Scanner kullanıyorum.Bu karakter neden tarayıcımın bozulmasına neden oluyor?

Bu metne kaydedilmiş bir .txt dosyam var.

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

ben yapmaya çalışıyorum Bütün bir tarayıcı ile bu dosya açık ve dosyadan 70,197 ait "CurrentValue" ayıklamak ve int olarak kaydedin. Ancak, dosya her açıldığında bir satır okunmaz ve mesaj olarak ile NoSuchElementException atar. Dosyayla uğraştıktan ve Çince karakterlerden bazılarını tek tek çıkardıktan sonra bu küçük adama narrow daraltdım. Bazı sebeplerden dolayı tarayıcı bu karakteri sevmez. Sadece değiştirmem gereken bir kodlama ayarının olup olmadığını veya BufferedReader'ı kullanacak mıyım diye merak ediyordum. Ne olduğunu anlayamadığımdan emin değilim. Peki burada neler oluyor?

Düzenleme: İşte tarayıcımın başlatılması.

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; 
      } 

Sadece kopyaladım. bölge == "Çin"

+1

Tarayıcınızın bir örneğine gidin? Karakter kodlaması uygun şekilde ayarlanmışsa ilgileniyorum. –

+0

Doğru kodlamayı ayarlıyor musunuz? Bu kodlama nedir? Ve "zahmetli karakter" için Unicode kod noktası nedir? – Thilo

cevap

4

Scanner numaralı telefonunuzu oluştururken doğru kodlamayı belirtmelisiniz. Yapıcı:

public Scanner(InputStream source, String charsetName) 

belirtilen girdi akımından taranan değerleri üreten yeni Tarayıcı oluşturur. Akıştaki baytlar, belirtilen karakter kümesini kullanarak karakterlere dönüştürülür.

Find here your charset

i :) yabancı karakterleri UTF-16 ancak bir uzman sanırım.

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

Ayrıca, bu dosyanın İngilizce, Kore ve Tayvan'dan da karakterleri olacağını da unutmayın (oradaki dilleri bilmiyorum). UTF-16 düşündüğün tüm destekleri destekleyecek mi? – david2278

+0

[Buraya tıklayın] (http://a4esl.org/c/charset.html) –

+1

UTF-16, Unicode kod noktalarını kodlar; bu nedenle, dillerin çoğunu günümüzde kapsayan Unicode standardında herhangi bir dilin karakterini açıkça saklayabilir. [Mutlak Minimum Her Yazılım Geliştirici Kesinlikle, Unicode ve Karakter Setleri Hakkında Bilinmesi Gerekenler (Mazeret Yok!)] (Http://www.joelonsoftware.com/articles/Unicode.html) –