从UTF8转换为ASCII

时间:2010-12-04 06:06:34

标签: c# encoding utf-8 ascii

我从以UTF8编码存储的XML文件中读取文本。 C#完美地读取它,我检查了调试器,但当我尝试将其转换为ASCII以将其保存在另一个文件中时,我得到了一个? char在角色冲突的地方。例如,本文:

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

2 个答案:

答案 0 :(得分:31)

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

答案 1 :(得分:7)

无法完成。 ASCII没有这些字母,因此您可以做的最好的事情是对它们进行URL编码或unicode-escape编码。