从UTF8转换为ASCII

Dav*_*nde 12 c# encoding ascii utf-8

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

string s = "La introducción masiva de las nuevas tecnologías de la información";
Run Code Online (Sandbox Code Playgroud)

将被保存为

"La introducci?n masiva de las nuevas tecnolog?as de la informaci?n"
Run Code Online (Sandbox Code Playgroud)

我不能只为他们的拉丁语(a,e,i,o,u)元音取代它们,因为西班牙语中的某些单词会错过这种意义.我已经试过这个问题没有sucess.所以我希望有人可以帮助我.第二个选择的答案甚至没有编译......!

如果有人想看看,我的代码是这样的:

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();
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*tta 31

这些字符在ASCII中没有映射.查看ASCII表,如维基百科,以验证这一点.您可能对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);
Run Code Online (Sandbox Code Playgroud)


Ign*_*ams 7

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

  • 因为Notepad ++并没有真正使用ASCII.它使用类似CP1250的东西,**有*那些字母. (5认同)
  • Notepad++ 转换为 Win-1252 代码页(拉丁文),其重音符号位于表的上半部分(字符代码 128+)。然而,这不是 ASCII,而是 ASCII 的扩展。ASCII 只定义 0-127 范围内的字符。同时,在具有不同代码页的计算机上打开该文件将显示不同的字符来代替带重音的字符。例如,在 Win-1251 中,您会看到一些西里尔字母。 (2认同)