2010-12-04 25 views
9

UTF8 kodlamasında saklanan bir XML dosyasından okunan bir metin var. C# mükemmel okur, debugger ile kontrol ettim, ama başka bir dosyaya kaydetmek için ASCII'ye dönüştürmeye çalıştığımda bir tane alırım? çatışan bir karakterin olduğu yerlerde char. Örneğin, bu metin:UTF8'den ASCII'ye dönüştürme

string s = "La introducción masiva de las nuevas tecnologías de la información"; 

Sadece (a, e, i, o, u) İspanyolca bazı kelimeler çünkü ünlüler onların latin onları yerini alamaz

"La introducci?n masiva de las nuevas tecnolog?as de la informaci?n" 

olarak kaydedilebilir Will olur anlayışı özlüyorum. Hiç bir sorun olmadan this ve this soruları denedim. Yani birisinin bana yardım edebileceğini umuyorum. İkincisi seçilen cevap bile derlenmiş değildi ...!

birisi bir bakmak istiyor durumda

, benim kod bu biridir:

private void WriteInput(string input) 
{ 
    byte[] byteArray = Encoding.UTF8.GetBytes(input); 
    byte[] asciiArray = Encoding.Convert(Encoding.UTF8, Encoding.ASCII, byteArray); 
    string finalString = Encoding.ASCII.GetString(asciiArray); 

    string inputFile = _idFile + ".in"; 
    var batchWriter = new StreamWriter(inputFile, false, Encoding.ASCII); 
    batchWriter.Write(finalString); 
    batchWriter.Close(); 
} 

cevap

25

Bu karakterlerin ASCII'de eşlemesi yoktur. Bunu doğrulamak için Wikipedia's gibi bir ASCII tablosunu gözden geçirin. Windows 1252 kodlamasıyla veya "genişletilmiş ASCII" ile ilginizi çekebilir, aradığınız ispanyolca dahil birçok aksanlı karakter için kod noktaları vardır.

var input = "La introducción masiva de las nuevas tecnologías de la información"; 
var utf8bytes = Encoding.UTF8.GetBytes(input); 
var win1252Bytes = Encoding.Convert(
       Encoding.UTF8, Encoding.GetEncoding("windows-1252"), utf8bytes); 
File.WriteAllBytes(@"foo.txt", win1252Bytes); 
+0

Bunu denedim, ancak ó için o, á için a. vb ... –

+0

@David: Yukarıdaki test vakasını kullanarak benim için mükemmel çalışıyor. Kodunuzda bir yerde ASCII kodlaması (Encoding.ASCII) bulunmadığından emin olun. –

+0

Bunun için üzgünüm! tekrar test edildi ve bir çekicilik gibi çalışıyor ... Şimdi neden 18.3K temsilcisi var biliyorum! ;) –

7

Yapılamaz. ASCII'nin bu harfleri yoktur, bu yüzden yapabileceğiniz en iyi şey URL kodlamak veya unicode-escape-kodlamaktır.

+0

Nasıl olur? ASCII bu harfleri yoksa, Notepad ++ kullanarak UTF8'den ASCII'ye kodlamayı nasıl değiştirebilirim ve bir cazibe gibi çalışır? –

+5

Notepad ++, ASCII'yi kullanmıyor. CP1250 gibi bir şey kullanıyor. –

+0

Pekala, beni oraya götürdün ... –