2009-08-21 2 views
0

고정 크기 열이있는 일반 텍스트 파일을 생성해야하는 응용 프로그램을 작성하고 있습니다.VB.NET (인코딩)에서 텍스트 파일 작성

나의 현재 코드는 다음과 같습니다, "N", "A", 등, 그리고 올바른 인코딩을 찾을 수 없습니다 :

Dim MyFilePath As String = Path & FILE_PREFIX & FileNr & ".TXT" 

IO.File.Delete(MyFilePath) 

Dim FileStr As New IO.StreamWriter(MyFilePath, False, <ENCODER HERE>) 
Do While r.Read 
    FileStr.WriteLine(r("TXTLine")) 
Loop 
FileStr.Close() 
r.Close() 

내 문제는 내가 같은 일부 특수 문자를 가지고있다.

  • 기본값을 사용하면 "ñ"을 두 문자로 바꿉니다.
  • ASCII를 사용하는 경우 모든 특수 문자는 "?"로 끝납니다.
  • UTF-8을 사용하는 경우 모든 텍스트는 이면 정상이지만 파일의 첫 번째 바이트에 "ÿ"가 추가됩니다 ( ).

datareader와 마찬가지로 텍스트 파일에 특수 문자를 써야합니다. 열의 길이가 고정되어 있기 때문에 추가 문자를 추가 할 수 없습니다 ...

어떻게해야합니까?

+3

은 [Byte-Order Mark] [1]입니다 ... 파일을 여는 중입니까? [1] : http://en.wikipedia.org/wiki/Byte-order_mark – Breakthrough

답변

2

올바른 인코딩을 확인하는 방법은 무엇입니까?

Notepad으로 파일을 여는 중이라면 Windows-1252은 아마도 원하는 인코딩 일 것입니다.

Encoding.GetEncoding("Windows-1252") 

을 제공합니다.

일부 열은 고정 길이라고합니다. 다른 도구로 가져 오기 위해 파일에 데이터를 쓰고 있습니까? 그렇다면 다른 도구가 필요로하는 인코딩을 확인해야합니다. 메모장과 같이 파일을 보는 데 사용할 수있는 도구가 무엇이든간에 어떤 도구가 보이지 않는지 확인해야합니다.

+0

Worked Perfect! – Burnsys

+0

파일은 액세스 권한이없는 타사 응용 프로그램에서 읽을 수 있습니다. VEX (HEX 뷰어)로 파일을보고 있는데, 다음과 호환되어야합니다. http://www.asciitable.com/. 즉, "Ñ"는 12 월 16 일 또는 16 진수 : F1 – Burnsys

+0

과 같습니다. "단순히 메모장에서 파일을 여는 중이라면 Windows-1252가 원하는 인코딩 일 것입니다." 미국이나 서유럽에있는 경우 사실이며 나머지 국가에서는 그렇지 않을 수도 있습니다. 물론 그 사람들은 인코딩에 대해 더 많이 알고 싶어하는 경향이 있으므로 전달할 것은 분별있는 조언입니다. – MarkJ

0

잠깐, 당신은 열이 "고정 된 길이"여야한다고 말합니다. 이것은 다른 응용 프로그램에서이 파일을 읽으려고한다는 것을 의미합니다.이 두 번째 응용 프로그램이 "특수"(Unicode) 문자를 읽을 수 있습니까?

다른 응용 프로그램이 ASCII 만 필요로하지 않고 완전히 다른 숫자를 사용하는 특수 문자 중 일부를 처리하는 특정 code page이 있습니까 (일부 로컬 언어에서 상위 비트 ASCII 문자를 해석 함)?

+0

HEX 뷰어로 파일을 읽는 중입니다. – Burnsys

0

문제는 올바른 인코딩을 찾을 수 없다는 것입니다. 문제는 소스 인코딩이 무엇인지 모르는 것입니다. 일반 ASCII는 실제로 256자를 가지고 있고 원본에 ASCII 팔레트에없는 악센트 부호가있는 문자가 들어 있으면 ASCII 인코딩으로 쓸 수 없습니다. 이야기의 끝.

두 시스템 간의 통신을 재검토해야합니다. 유니 코드 문자가 필요한 경우 소스와 대상은 모두 플랫 파일이나 일부 XML 문서에서 유니 코드를 받아 들여야합니다.

원형 구멍 (ASCII 파일)에 사각형 페그 (유니 코드 액센트 문자)를 넣을 수 없습니다.

+1

사각형의 면적이 원의 면적에 2/pi를 곱한만큼 동일 할 수 있습니다. ;) –