2010-12-04 204 views
9

我有一個從UTF8編碼存儲的XML文件中讀取的文本。 C#完全讀取它,我使用調試器進行了檢查,但是當我嘗試將其轉換爲ASCII以將其保存在另一個文件中時,我得到了一個?在有衝突的角色的地方燒焦。舉例來說,這樣的文字:從UTF8到ASCII的轉換

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

將被保存爲

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

我不能代替他們的拉丁(A,E,I,O,U)元音,因爲有些詞在西班牙語會錯過了感覺。我已經試過thisthis沒有成功的問題。所以我希望有人能幫助我。第二個選定的答案甚至沒有編譯...!

如果有人想看看,我的代碼是這樣的一個:

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

回答

25

這些字符在ASCII中沒有映射。檢查一個ASCII表,如Wikipedia's,以驗證這一點。您可能會對Windows 1252編碼感興趣,或者稱爲「擴展ASCII」,因爲它有時會被調用,其中包含許多重音字符的代碼點,包括西班牙語。

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

不能完成。 ASCII沒有這些字母,所以你可以做的最好的做法是URL編碼或unicode轉義編碼它們。

+0

怎麼回事?如果ASCII沒有這些字母,我怎樣才能使用Notepad ++將編碼從UTF8更改爲ASCII並且像魅力一樣工作? – 2010-12-04 06:10:33

+5

因爲Notepad ++沒有真正使用ASCII。它使用的是類似CP1250的軟件,它*具有這些字母。 – 2010-12-04 06:13:45