2010-12-11 5 views
5

Microsoft.VisualBasic.Fileio.TextFieldParser를 사용하여 Excel 2003에서 작성된 CSV 파일을 구문 분석합니다. 구문 분석기는 확장 ASCII 값을 물음표로 변환한다는 점에서 예외적으로 작동합니다! 이 경우 파일 내용이었다 다음 TextFieldParser가
을 반환Microsoft.VisualBasic.FileIO.TextFieldParser가 ± Ascii 241을? Ascii 63

± 3
? 3

System.Text.Encoding 패키지의 모든 인코딩을 사용해 보았습니다. 나는 UTF7을 가지고 있다고 생각했지만 + 기호를 공백으로 바꾸는 것과 같은 다른 문자를 버리는 것이었다.

도움을 주시면 감사하겠습니다.

+1

'ASCII 241'과 같은 것은 없습니다. 바이트 128-255의 의미는 ** ASCII에 대한 ** 확장으로 정의되며, 많은 것들이 있습니다. –

+2

파일을 저장 한 내용을 확인 했습니까? 메모장에서 열고 다른 이름으로 저장을 선택하면 인코딩을 선택할 수있는 드롭 다운 메뉴가 나타납니다. 그것이 무엇인지 확인하십시오, 나는 ANSI를 의심합니다. UTF-8로 저장 한 다음 앱을 통해 다시 실행하려고 할 수 있습니다. – Pieter

답변

15

기본적으로 Microsoft.VisualBasic.Fileio.TextFieldParser는 UTF8 인코딩이지만 텍스트 파일은 시스템의 현재 ANSI 인코딩에 있습니다. TextFieldParser(string path, Encoding defaultEncoding)과 같은 인코딩을 사용하는 생성자 중 하나를 사용하십시오.

인코딩을 위해 System.Text.Encoding.Default을 전달하거나 코드 페이지에서 전달하는 새 인코딩 객체를 생성 할 수 있습니다. 영어 Windows의 기본값은 1252입니다.

0
Dim s As String = "± 3" 
    'this produces the ? 
    Dim b() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(s) 

    'try this 
    Dim anEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding(28591) 
    b = anEncoding.GetBytes(s) 

    s = anEncoding.GetChars(b) 'check to see if it round-trips