2016-08-05 2 views
-1

B "HСинтаксический, что должно быть табуляцией файл в C#

У меня есть файл, который должен быть с разделителями табуляции. Excel открывает отлично без проблем. Но когда я пытаюсь File.ReadAllText () Я не могу получить достойное представление. Лучшее, что я могу сделать, это использовать UTF8, который возвращает большую часть данных, но первая часть не заполнена, а некоторые вкладки в остальной части документа отсутствуют.

Вот первая строка при чтении с использованием UTF8: \ u0010 \ b \ u0004c \ u0004 \ 0 \ 0 \ u0006 \ u0003 \ 0 \ 0 \ 0 \ 0! A \ u0004 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ u0001 \ 0 \ 0 \ 0ID \ 0 \ 0 \ 0 \ 0 \ 0 \ 0C \ 0 \ 0 \ 0 \ 0 \ u0006 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0NAME \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0C \ 0 \ 0 \ 0 \ 0 \ u001e \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0ADDR \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0C \ 0 \ 0 \ 0 \ 0 (\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0ADDRC \ 0 \ 0 \ 0 \ 0 \ 0 \ 0C \ 0 \ 0 \ 0 \ 0 (\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0CITY \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0C \ 0 \ 0 \ 0 \ 0 \ u001e \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0STATE \ 0 \ 0 \ 0 \ 0 \ 0 \ 0C \ 0 \ 0 \ 0 \ 0 \ u0014 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0ZIP \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0L \ 0 \ 0 \ 0 \ 0 \ u0001 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ r

И вот первые несколько байтов, отображаемых при открытии в Блокноте: õc ÁŸ! £ A

Кто-нибудь знает эту кодировку?

+1

вы пробовали 'StreamReader.CurrentEncoding'? – Rahul

+0

StreamReader.CurrentEncoding работает только для стандартных кодировок. Эти файлы, очевидно, не являются стандартными. – Rabbi

+0

@ peter-duniho Этот вопрос не дублируется. Это даже не связано с вопросом, который вы опубликовали. Этот вопрос спрашивает, как вы программно находите кодировку из небольшого списка стандартных кодировок. Мне не требуется программное обнаружение. Мне нужна помощь в определении этой конкретной кодировки. – Rabbi

ответ

1

Прежде всего, давайте проверим возможность возникновения проблемы, связанной с кодировкой, которая является ошибкой текстовых файлов. Используйте Microsoft Word или Notepad ++ для обнаружения кодировки путем предварительного просмотра каждого из них.

В Microsoft Word перейдите в меню «Параметры», «Дополнительно», «Общий» и добавьте проверку, кроме «Подтвердить преобразование формата файла при открытии». После этого нажмите кнопку «ОК». Затем откройте файл в Microsoft Word. Просмотрите каждую кодировку, пока не найдете тот, который показывает все правильно.

После того, как вы нашли кодировку, используйте класс StreamReader .NET Framework to open the file with that encoding.

+0

Спасибо. Word и NotePad ++ были отличными идеями. ни один из них не мог правильно открыть файл. Каждый из них дает множество вариантов кодировок, но ни один из них не отображает файл правильно. Теперь Excel отлично отображает файл. Проблема в том, что у меня есть куча таких файлов, поэтому мне нужно выяснить, какая именно кодировка, чтобы я мог грамматически читать эти файлы. И я не мог найти место в Excel, которое сообщит мне, какую кодировку он использовал, чтобы открыть файл. – Rabbi

+0

@ Рабби: Это, безусловно, странно. Возможно, что у вас есть на самом деле двоичный файл, который excel распознает и вообще не является текстовым файлом. Вы можете попробовать экспортировать их из Excel в фактический файл с разделителями. Кроме того, я могу проанализировать один из этих файлов для вас, хотя, возможно, вы не захотите делать это по соображениям конфиденциальности. –

-1

Этот способ получения кодировки файлов для меня был до сих пор полезен.

http://weblog.west-wind.com/posts/2007/Nov/28/Detecting-Text-Encoding-for-StreamReader

/// <summary> 
    /// Detects the byte order mark of a file and returns 
    /// http://weblog.west-wind.com/posts/2007/Nov/28/Detecting-Text-Encoding-for-StreamReader 
    /// an appropriate encoding for the file. 
    /// </summary> 
    /// <param name="srcFile"></param> 
    /// <returns></returns> 
    public static Encoding GetFileEncoding(string srcFile) 
    { 
     // *** Use Default of Encoding.Default (Ansi CodePage) 
     Encoding enc = Encoding.Default; 
     // *** Detect byte order mark if any - otherwise assume default 
     byte[] buffer = new byte[5]; 
     FileStream file = new FileStream(srcFile, FileMode.Open); 
     file.Read(buffer, 0, 5); 
     file.Close(); 

     if (buffer[0] == 0xef && buffer[1] == 0xbb && buffer[2] == 0xbf) 
      enc = Encoding.UTF8; 
     else if (buffer[0] == 0xfe && buffer[1] == 0xff) 
      enc = Encoding.Unicode; 
     else if (buffer[0] == 0 && buffer[1] == 0 && buffer[2] == 0xfe && buffer[3] == 0xff) 
      enc = Encoding.UTF32; 
     else if (buffer[0] == 0x2b && buffer[1] == 0x2f && buffer[2] == 0x76) 
      enc = Encoding.UTF7; 
     return enc; 
    } 

Я использую его как этот

//To read 
Encoding currentFileEnc = GetFileEncoding(TheFile); 
using (StreamReader sr = new StreamReader(TheFile, currentFileEnc)) 
{ 
    //Blah blah blah 
} 

//To write back 
using (StreamWriter sw = new StreamWriter(TempFilePath, false, currentFileEnc)) 
{ 
    //blah blah blah 
} 
+0

Спасибо. Как я сказал в вопросе. Эти файлы не входят ни в один из стандартных кодировок. Я пробовал всех завсегдатаев, и я не получаю полезные файлы. С другой стороны, Excel открывает их отлично. Мне просто нужно знать, как это сделать грамматически. Как только я определил эту кодировку, мне не нужно будет ее грамматически проверять - мне просто нужно написать (или найти) функцию преобразования. – Rabbi

+0

Название вашего вопроса: «Как вы можете найти кодировку файла C#» –

+0

Да Мне нужен способ найти кодировку этого конкретного файла. Это не стандартная кодировка. Пожалуйста, прочитайте вопрос. – Rabbi