2010-12-04 12 views
9

私は、UTF8エンコーディングで保存されたXMLファイルからテキストを読み込みました。 C#はそれを完全に読み取り、私はデバッガでチェックしましたが、別のファイルに保存するためにASCIIに変換しようとするとどうなりますか?矛盾する文字があった場所のchar。たとえば、このテキストは:UTF8からASCIIへの変換

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

は、私はちょうどスペインのでしょうではいくつかの単語ので、そのラテン語(、E、I、O、U)母音のためにそれらを置き換えることはできません

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

として保存されますセンスを欠いている。私はすでに成功していない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(); 
} 

答えて

25

これらの文字には、ASCIIではマッピングがありません。 Wikipedia'sのような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); 
+0

これを試してみましたが、oはo、aはaを変更します。 ... –

+0

@David:上のテストケースを使用して、私にとって完璧に動作します。 ASCIIコード(Encoding.ASCII)があなたのコードのどこかに残っていないことを確認してください。 –

+0

ごめんなさい!もう一度試してみて、魅力的な作品です...今は18.3Kの担当者がいる理由を知っています! ;) –

7

を行うことはできません。 ASCIIにはこれらの文字がないので、URLエンコードまたはユニコードエスケープエンコードが最適です。

+0

どうしてですか? ASCIIがこれらの文字を持たない場合、どのようにUTF8からASCIIへのエンコードを変更することができますか? –

+5

メモ帳++は実際にASCIIを使用していないためです。 CP1250のようなものを使っています。 –

+0

よろしくお願いします... –

関連する問題