web-dev-qa-db-ja.com

UTF8からASCII

UTF8エンコーディングで保存されたXMLファイルからテキストを読み取りました。 C#はそれを完全に読み取り、デバッガーで確認しましたが、別のファイルに保存するために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 の質問を試しましたが成功しませんでした。だから私は誰かが私を助けることができることを願っています。 2番目の選択された答えはコンパイルさえしませんでした...!

誰かが見てみたい場合のために、私のコードはこれです:

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

これらの文字にはASCIIでのマッピングはありません。 ASCIIテーブル、 Wikipedia's など)を確認して、これを確認します。Windows1252エンコーディング、または「拡張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);
31

できません。 ASCIIにはこれらの文字がないため、URLエンコードまたはUnicodeエスケープエンコードするのが最善の方法です。