0

以下は、私の問題の説明を含むコードです。

  1. このファイルのエンコーディングを見つける必要がありますが、今は必要ありません。

    string FilePath = @"C:\01 New.txt";
    System.IO.FileStream inFile = new System.IO.FileStream(FilePath, System.IO.FileMode.Open,System.IO.FileAccess.Read);
    byte[] binaryData = new Byte[inFile.Length];
    long bytesRead = inFile.Read(binaryData, 0, (int)inFile.Length);
    inFile.Close();
    string base64String = System.Convert.ToBase64String(binaryData, 0, binaryData.Length);// Converting ToBase64String
    Console.WriteLine("base64String is " + base64String);
    

    上記のプロセスは別のものによって行われ、「base64String」のみが返されると仮定してください。これからはちゃんと読まねば。

  2. そのためには、base64String の「ENCODING」が必要です。

    byte[] s = Convert.FromBase64String(base64String);
    switch (GET_ENCODING(base64String))
    {
      case "ASCII":
        Console.WriteLine("ASCII text is " + Encoding.ASCII.GetString(s).Trim()); break;
      case "Default":
        Console.WriteLine("Default text is " + Encoding.Default.GetString(s).Trim()); break;
      case "UTF7":
        Console.WriteLine("UTF7 text is " + Encoding.UTF7.GetString(s).Trim()); break;
      case "UTF8":
        Console.WriteLine("UTF8 text is " + Encoding.UTF8.GetString(s).Trim()); break;
      case "BigEndianUnicode":
        Console.WriteLine("BigEndianUnicode " + Encoding.BigEndianUnicode.GetString(s).Trim()); break;
       case "UTF32":
         Console.WriteLine("UTF32 text is " + Encoding.UTF32.GetString(s).Trim()); break;
       default:
         break;
      }
    
4

1 に答える 1

2

Base64 エンコーディングは、これがソース エンコーディングであることがわかっているため、問題とは関係ありません。基本的に、ターゲットのエンコーディングや文字セットを知らなくても、テキストとしてエンコードするバイト ストリームがあります。これは、テキストが本当に危険にさらされていることを意味します。@deceze がコメントしたように、最善の方法は、エンコーディングが常に既知/利用可能であることを確認することです。

テキストが XML、HTML、または MIME の場合、次の 2 つのパスでこれを行うことができます。

  1. charsetASCII/UTF-8 としてエンコードし、値が「UTF-8」、「ISO-8859-1」などの属性を解析/検索します。
  2. 手順 1 で識別された文字セットにエンコードします。

それ以外の場合は、エンコーディングを検出するためのヒューリスティックなアプローチが必要になります。これは 100% 信頼できるものではありません。以下のリンクを参照してください。

編集: XML/HTML が ASCII/UTF-8 以外のものとしてエンコードされる可能性があります。これは、MIME にも当てはまります。これは、最初の 128 文字が同じである ASCII/UTF-8/ISO-8859-1 のみがエンコーディングであることがわかっている場合を除き、これらのファイル タイプの場合でもヒューリスティックなアプローチが必要になることを意味します。

于 2013-10-25T02:41:46.343 に答える