C#을

2016-08-05 1 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 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ u0006 \ 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 \ 0ADDR \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0C \ 0 \ 0 \ 0 \ 0 (\ 0 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0ADDRC \ 0 \ 0 \ 0 \ 0 \ 0C \ 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 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0STATE \ 0 \ 0 \ 0 \ 0 \ 0 \ 0C \ 0 \ 0 \ 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 \ u0001 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 0 0 0 0 0 0 0301 메모장에서 열 때 표시되는 몇 바이트 : õc ÁŸ! £

누구나 인코딩을 인식합니까?

+1

처럼 사용할 수 있습니까? – 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

@Rabbi : 그것은 확실히 이상합니다. 실제로 가지고있는 것은 엑셀이 인식 할 수있는 평범한 텍스트 파일이 아닌 바이너리 파일 일 가능성이 있습니다. Excel에서 실제로 탭으로 구분 된 파일로 내보낼 수 있습니다. 또한, 나는 당신을 위해 그 파일들 중 하나를 분석 할 수는 있지만, 프라이버시 이유로 그것을하기를 원하지 않을 수도 있습니다. –

-1

파일 인코딩을 얻는 방법은 지금까지 나에게 좋았습니다. 당신은`StreamReader.CurrentEncoding`을 시도

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

관련 문제