2016-04-08 14 views
0

Bu kodu vardır:Java'nın UTF-8 kodlaması

BufferedWriter w = Files.newWriter(file, Charsets.UTF_8); 
w.newLine(); 
StringBuilder sb = new StringBuilder(); 
sb.append("\"").append("éééé").append("\";") 
w.write(sb.toString()); 

Ama işe almaktadır. Sonunda benim dosyamda bir UTF-8 kodlaması yok. Ben, bu yüzden ilk BOM charcater (http://bugs.java.com/view_bug.do?bug_id=4508058) tanınması konusunda bir hata olduğunu tespit

...

w.write(new String(sb.toString().getBytes(Charsets.US_ASCII), "UTF8")); 

Bu soru işaretleri dosyasında her yerde görünür yaptı: yazarken bunu yapmak çalıştı BOMInputStream sınıfını kullanmayı denedim. Ama bomIn.hasBOM() her zaman false döndürür, bu yüzden sorunum BOM ile ilgili olmayabilir sanırım?

Dosyamı UTF-8'de nasıl kodlandırabilirim biliyor musunuz? Sorun Java 8'de çözüldü mü? görüntüleyici veya aracı o değil dosyasını görüntülemek için kullanmakta olduğunuz

sorundur (eğer yedek olarak String bir dize oluştururken rağmen) Eğer ilk örnekte doğru UTF-8 yazıyoruz

+1

Asıl sorununun ne olduğunu anlamakta zorlanıyorum. Lütfen gerçek kodu, girişi ve çıkışı gösterin. UTF-8, Java'da gayet iyi çalışıyor ve tabii ki 'sb.toString(). GetBytes (Charsets.US_ASCII)' birçok soru işareti üretecek, çünkü US_ASCII yalnızca 0 karakterleri destekliyor .. 127, her şey geçersiz ve bir soru işareti. Ayrıca UTF-8 ile BOM kullanımı önerilmez. –

+0

Elbette işe yarıyor. 'BufferedWriter' ile oluşturduğunuzda, w.write ("Merhaba, äöå"); w.close(); 've ben dosyanın UTF-8 kodlu olacağını garanti ediyorum. – Kayaman

+0

"Dosyada her yerde soru işaretleri belirdi ..." - bu nedenle sorun aslında dosyayı görüntülediğiniz yerdedir. – Gimby

cevap

1

Dosyayı UTF-8 olarak okudum.

Sadece ASCII olmayan tüm baytları soru işaretlerine dönüştüren ASCII'de karıştırmayın.