5

一部の値を他の値に置き換えて、後でパラメーターとして使用するために使用する c# プログラムがあります。「NAME1」が &1 に、「NAME2」が &2 に、というように置き換えられます。

問題は、変更するデータが UNIX でエンコードされたテキスト ファイル上にあり、メモリ上であっても í などの特殊文字が正方形 (無効な文字) として読み取られることです。私の手に負えない仕様のため、ファイルは変更できず、そのように読むしかありません。

私は、c# が提供する 130 のエンコーディングのほとんどを読み取ろうとしました。

EncodingInfo[] info = System.Text.Encoding.GetEncodings();
string text;
for (int a = 0; a < info.Length; ++a)
{
      text = File.ReadAllText(fn, info[a].GetEncoding());
      File.WriteAllText(fn + a, text, info[a].GetEncoding());
}

fn は、読み取るファイル パスです。作成されたすべてのファイル (130 など) をチェックしましたが、誰も適切に書いていないので、アイデアがなく、インターネット上で何も見つけることができません。

解決:

最後に、このコードはテキストを適切に取得する作業を行ったように見えます。また、Writing 部分の同じエンコーダーを修正する必要がありました。

System.Text.Encoding encoding = System.Text.Encoding.GetEncodings()[41].GetEncoding();

String text = File.ReadAllText(fn, encoding); // get file text 

// DO ALL THE STUFF I HAD TO

File.WriteAllText(fn, text, encoding) System.Text.Encoding.GetEncodings()[115].GetEncoding();   //Latin 9 (ISO) 

/* ALL THIS ENCODINGS WORKED APARENTLY FOR ME WITH ALL WEIRD CHARS I WAS ABLE TO WRITE :P
    System.Text.Encoding.GetEncodings()[108].GetEncoding(); //Baltic (ISO)
    System.Text.Encoding.GetEncodings()[107].GetEncoding(); //Latin 3 (ISO)
    System.Text.Encoding.GetEncodings()[106].GetEncoding(); //Central European (ISO)
    System.Text.Encoding.GetEncodings()[105].GetEncoding(); //Western European (ISO)
    System.Text.Encoding.GetEncodings()[49].GetEncoding();      //Vietnamese (Windows)
    System.Text.Encoding.GetEncodings()[45].GetEncoding();      //Turkish (Windows)
    System.Text.Encoding.GetEncodings()[41].GetEncoding();      //Central European (Windows)   <-- Used this one 
    */

ご助力ありがとうございます

ノーマン(1)

4

1 に答える 1

2

適切なエンコード形式を取得する必要があります。試す

ファイル -i を使用します。これにより、ファイルの MIME タイプ情報が出力されます。これには、文字セットのエンコーディングも含まれます。私もそれの マンページを見つけました:)

または試してみてくださいenca

エンコーディングを推測し、変換することさえできます。マニュアルページを見てください。

適切なエンコード形式がある場合は、それをファイルの読み取りに適用する方法を探してください。

引用:スクリプトを介して Unix でファイルのエンコーディングを見つける方法

于 2012-05-08T14:57:53.000 に答える