2013-10-24 3 views
0

Ниже приведен код с описанием моей проблемы:Как получить кодировку из BASE64STRING

  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. Для этого мне нужно "Encoding" в base64String:

    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; 
        } 
    
+1

и почему вы кричите? – MaVRoSCy

+2

ЧТО ЯЗЫК ЭТО? МОЖЕТЕ РЕГУЛИРОВАТЬ ВАШИ ТЕГИ? – x29a

+3

Как уже было сказано в ответ на многие вопросы раньше: практически невозможно выяснить, что такое кодировка двоичного блоба! Вы всегда должны **, ** всегда ** иметь метаданные, которые сообщают вам, что такое кодировка. Если вы этого не сделаете, вы в основном ввернуты. – deceze

ответ

2

Base64 кодирование не имеет отношения к этой проблеме, потому что вы знаете, что это кодирование источника. В принципе, у вас есть поток байтов для кодирования в виде текста, не зная целевой кодировки или набора символов. Это означает, что ваш текст действительно скомпрометирован; как @deceze прокомментировал лучшее, чтобы обеспечить кодировку always known/available.

Если текст XML, HTML или MIME, то вы можете сделать это в два прохода:

  1. Encode как ASCII/UTF-8, а затем разобрать/поиск charset атрибута, значение которого любой из " UTF-8" , "ISO-8859-1" и т.д.
  2. Encode к набору символов, определенных в пункте 1.

в противном случае вам нужен эвристический подход к обнаружить кодировку. Это не будет на 100% надежным. Смотрите ссылки ниже:

Edit: это возможно для XML/HTML, чтобы быть закодирован как нечто иное, чем ASCII/UTF-8; это может быть справедливо и для MIME. Это означает, что даже для этих типов файлов потребуется эвристический подход, если вы не знаете, что кодировка может быть только ASCII/UTF-8/ISO-8859-1, первые 128 символов которой совпадают.

Смежные вопросы