解析什么是应该在C#

问题描述:

B“H制表符分隔的文件解析什么是应该在C#

我应该是制表符分隔的文件。Excel打开它精细没有问题。但是当我尝试File.ReadAllText( )我无法得到一个体面的代表 我可以做的最好的是UTF8返回大部分数据,但是第一行全部搞砸了,文档其余部分的一些标签丢失了。这是使用UTF8读取的第一行: ? 0 \ 0 \ 0 \ 0 \ 0 \ U0001 \ 0 \ 0 \ 0ID \ 0 \ 0 \ 0 \ 0 \ 0 \ 0℃\ 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 \ 0℃\ 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 \ 0℃\ 0 \ 0 \ 0 \ 0(\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0ADDRC \ 0 \ 0 \ 0 \ 0 \ 0 \ 0℃\ 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 \ 0℃\ 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 \ 0℃\ 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 \ 00001 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \在记事本中打开时显示的几个字节: !!A A

有没有人认识到编码?

+1

你试过'StreamReader.CurrentEncoding'? – Rahul

+0

StreamReader.CurrentEncoding仅适用于标准编码。这些文件显然不是标准的。 – Rabbi

+0

@ peter-duniho此问题不重复。它甚至与你发布的问题没有关系。该问题询问您将如何通过编程从标准编码的小列表中找到编码。我不需要程序检测。我需要帮助确定这种特定的编码。 – Rabbi

首先,我们来检查一下编码相关问题的可能性,它是纯文本文件的*。使用Microsoft Word或Notepad ++通过预览每一个来发现编码。

在Microsoft Word中,进入菜单“选项”,“高级”,“常规”小节,并在“打开时确认文件格式转换”之外进行检查。完成后,点击确定按钮。然后,在Microsoft Word中打开该文件。预览每个编码,直到找到能正确显示所有内容的编码。

一旦找到编码,请使用.NET Framework to open the file with that encodingStreamReader类。

+0

谢谢。 Word和NotePad ++是伟大的想法。他们都不能正确打开文件。每个人都提供了大量的编码选项,但没有一个能够正确显示文件。现在,Excel不会显示该文件。问题是我有一堆这样的文件,所以我需要弄清楚它是什么编码,以便我可以在语法上读取这些文件。我无法在Excel中找到一个能够告诉我使用什么编码打开文件的地方。 – Rabbi

+0

@Rabbi:这当然很奇怪。有可能你拥有的实际上是一个excel可识别的二进制文件,根本不是纯文本文件。您可以尝试将它们从Excel导出到实际的制表符分隔文件中。另外,我可以为你分析其中的一个文件,但是,出于隐私原因你可能不想这样做。 –

到目前为止,这种获取文件编码的方式对我来说很好。

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