2011-08-30 20 views
5

Çince karakterleri (UTF-8'de kodlanmış) ile eşleşen desen Çince bir adres içinde Çince bir adres bulunup bulunmadığını kontrol etmem gerekiyor.Java ile

Çince karakterleri kolayca okuyabiliyorum ve yazabiliyorum.

bir vilayet (örneğin 广东) (广东 中国) bir adres dahil olup olmadığını kontrol etmek için String indexOf() yöntemini kullanmayı denemişlerdir. Ancak, bu her zaman -1 değerini döndürür.

Ben iyi çalışıyor (103 9910399 dahil olup olmadığını mesela) sayılar için kontrol deneyin

.

ben UTF-8 dize eşleştirme işlemek için farklı bir şey yapmak gerekir mi? Teşekkürler. Matt

+3

Java 'String' her zaman dahili olarak UTF-16'dır, dolayısıyla hangi sorunlarınız varsa UTF-8 ile ilgili değildir. Dizideki karakterlerin tam olarak aradığınızlarla aynı olduğundan% 100 emin misiniz? Her iki tarafta 'System.out.println ((int) s.charAt (i))' ile kontrol edin. –

+2

Örneğiniz benim için çalışıyor, .java dosyanızın doğru kodlamayla kaydedildiğini kontrol ettiniz mi? –

cevap

2

Örneğinizi denedim ve sistemimde Chineese yazı tipleri olmamasına rağmen, karakterler doğru şekilde gösterilmiyor, indexOf() benim için iyi çalışıyor.

Yani, kaynak dosyaların onay kodlama (* .java). Örneğin, eclipse kullanıyorsanız, Pencere/Tercihler/Genel/Çalışma Alanı/Metin dosyası Kodlama altında kontrol edin. UTF-8 kullanıyorum.

İkinci düşünce, java derleyicisi tarafından kullanılan kodlamadır. Tutulma durumunda bir şey söylemeniz gerekmez. Ben javac için muhtemelen -encoding kullanarak açık kodlama ayarlamanız gerektiğini düşünüyorum. Aksi takdirde, varsayılan işletim sistemi kodlaması muhtemelen kullanılacaktır.

İyi şanslar.

+0

Merhaba Alex, çok teşekkürler! Yeterince spesifik olmadığımı fark ettim. Kesinlikle haklısınız - yukarıdaki örnek, yalnızca dizeleri doğrudan kullanırsam iyi çalışır. Bu dizeleri bir dosyadan okuduğumda sorun olur. Asıl karakterleri yazdırdım ve ASCII 34'ün Unicode karakterlerinden önce ortaya çıktığını fark ettim. –

+0

Görünüşe göre Çin'e özgü bir sorunum yok - bir dosya okuma problemi. 2 dosyam var - il ve adres. Adreste il ve AB'de A karakteri vardı. Onları readline() kullanarak okuduğumda ve yazdıracağım zaman aşağıdaki çıktıları görüyorum (1) Sadece AB - 34: 65: 66: 34 olan addreseses için sadece A - 34:65:34 (2) vardı. Eyaletin adresle eşleştiğinden emin olmak için ne yapmam gerektiğinden emin değilsiniz veya AB –

+0

@Matt - AlexR ile eşleşir; Kodlama (String IDs veya Charset) girişlerini alan ilgili G/Ç yöntemlerine bakın. Metin veri girişlerini her zaman uygun şekilde (Java kaynak dosyaları dahil) çözmelisiniz. Temel bir primer için [here] (http://illegalargumentexception.blogspot.com/2009/05/java-rough-guide-to-character-encoding.html) adresine bakın. Sorunların teşhis edilmesine yardımcı olabilecek ilkel bir uygulama için [here] (http://www.nogalargumentexception.blogspot.com/2009/09/java-character-inspector-application.html) adresine bakın. – McDowell