从UTF8到ASCII的转换

问题描述:

我有一个从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(); 
} 

这些字符在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); 

不能完成。 ASCII没有这些字母,所以你可以做的最好的做法是URL编码或unicode转义编码它们。

+0

怎么回事?如果ASCII没有这些字母,我怎样才能使用Notepad ++将编码从UTF8更改为ASCII并且像魅力一样工作? – 2010-12-04 06:10:33

+5

因为Notepad ++没有真正使用ASCII。它使用的是类似CP1250的软件,它*具有这些字母。 – 2010-12-04 06:13:45