2009-09-25 4 views
1

DBF 파일을 쿼리 할 때 OLEDB에서 사용할 문자 인코딩을 지정할 수 있습니까?DBF를 쿼리 할 때 OLEDB에서 사용할 문자 인코딩을 어떻게 지정합니까?

가능한 해결 방법은 DBF 파일의 문자 인코딩에 대한 OLEDB 호출 전에 쿼리 문자열을 인코딩 한 다음 반환 될 때 모든 결과를 인코딩하는 것입니다. 이 작업은 가능하지만 OLEDB 나 ADO.NET이 나를 위해이 작업을 수행 할 수 있다면 좋을 것입니다.

UPDATE 것은

빅토르 Jevdokimov에 의한 suggestion가 자동으로 작동하지 않습니다. 하지만 그것은 문자열의 수동 변환을 조사하게했습니다. CultureInfo의 TextInfo 속성을 사용하여 OemCodePage 및 WindowsCodePage를 찾고 해당 인코딩 인스턴스를 가져 와서 수동 변환을 수행 할 수 있습니다. 그러나 ADO.NET에서 이러한 변환을 사용하여 변환을 수행 할 수는 없습니다.

+0

를 ADO.NET은 전송과 변환이 발생하는 위치 인코딩 변환 리더로 읽거나 라이터로 쓰기처럼, 다른 곳에 속해 있기 때문에 또는 다른 I/O. –

+0

그렇다면 귀하의 답은 나에게 해결책을 어떻게 제공합니까? 나는 그것을 얻지 못한다 :) –

+0

스레드가 귀하의 앱 레벨에있다. ADO.NET을 호출하기 전에 스레드 문화권을 변경합니다. 이것은 문자열을 ADO.NET과의 적절한 인코딩으로 변환합니다. 다른 입력/출력에 대한 원래 스레드 인코딩을 복원합니다. 내 방법을 시도 해 봤니? –

답변

2

DBF의 SQL을 실행하기 전에 나는 CurrentThread의 CurrentCulture을 변경하고 이후 복원 : 아마

Dim appCulture As System.Globalization.CultureInfo = System.Threading.Thread.CurrentThread.CurrentCulture 
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US") 
//execute command here 
System.Threading.Thread.CurrentThread.CurrentCulture = appCulture 
+0

스레드 문화권이 문자 인코딩에 어떤 영향을 미칩니 까? CultureInfo의 TextInfo 속성이 있지만 코드 페이지 만 처리합니다. –

+0

현재 런타임 문화권이 유니 코드 또는 UTF-8 또는 기타 언어라고 가정 해 보겠습니다. .NET은 내부적으로 메모리에 저장하고 출력 할 때 현재 문화권을 사용하여 다시 변환하기 위해 유니 코드로 오는 모든 것을 변환합니다. 그래서 현재 쓰레드 문화를 바꾸는 것은 .NET에 입출력을위한 변환을하는 방법을 말해줍니다. –

관련 문제