2009-08-13 6 views
2

C#에서는 텍스트 파일에서 SQL 문을 삽입 한 다음 ADO.NET을 사용하여 데이터베이스에서 실행하려고합니다. 일부 쿼리에는 그리스 문자 중 하나가 포함됩니다. 특히, 마이크로 (usec) 동안 사용되는 Mu (funky looking u). 문제는 물음표가 실제로 데이터베이스에 삽입되고 있다는 것입니다 (? sec). 그러나 디버거가 다이아몬드 내부에 물음표를 표시하고 있기 때문에 문제가 텍스트 파일을 읽는 중임을 느끼고 있습니다. StreamReader의 ReadLine 메서드를 사용하고 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?파일에서 특수 문자를 읽으려면 어떻게해야합니까?

답변

4

문제는 파일을 읽을 때 잘못된 인코딩을 사용한다는 것을 거의 확실합니다. 텍스트 파일의 인코딩이 실제로 무엇인지 알고 있습니까? 대부분의 .NET API는 기본적으로 UTF-8을 사용하지만 파일 이 Encoding.Default로 표시되는 운영 체제의 기본 인코딩이 될 수 있습니다. 이 시도 :

using (StreamReader reader = new StreamReader(filename, Encoding.Default)) 
{ 
    ... 
} 

나는 또한 강하게 당신이 그것을 데이터베이스를 건드리지 않고 작업을 얻을려고하는 것이 좋습니다. 그들의 유니 코드 인코딩의 관점에서 문자열의 문자를 출력 파일에 읽기 :

public static void DumpString(string text) 
{ 
    Console.WriteLine("Text: '{0}'", text); 
    foreach (char c in text) 
    { 
     Console.WriteLine("{0}: U+{1:x4}", c, (int) c); 
    } 
} 

을이 올바른 결과, 다음 데이터베이스에 삽입하려고를 제공합니다. 그런 식으로, 데이터베이스가 여전히 "잘못"된 것처럼 보이면 파일 액세스 대신 데이터베이스 액세스로 문제가 있음을 알 수 있습니다.

+0

트릭을 수행하는 것처럼 보였습니다. 그러나 나는이 모든 인코딩 된 것을 이해할 수 있을지 확신하지 못합니다. 기본 인코딩이 다른 다른 사용자가 파일을 수정 한 다음 내 앱을 새 파일로 다시 실행하려고하면 어떻게 될까요? 더 이상 작동하지 않습니까? 대신 Encoding.UTF8을 사용해야합니까? – bsh152s

+0

UTF-8을 사용하는 것이 훨씬 더 좋은 생각입니다.하지만 인코딩이 실제로 무엇인지 항상 알고 있어야합니다. 파일을 항상 UTF-8로 저장할 수 있습니까? –

2

당신은 세 가지를 확인해야합니다

  1. 당신이 위해 StreamReader
  2. 데이터베이스 서버의 열 유형 (NVARCHAR보다는 VARCHAR)에 대한 효과
  3. 데이터 정렬 열 때 사용되는 인코딩 열

이 중 하나라도 틀리면 DB에서 데이터를 읽을 때 잘못된 값을 얻게됩니다.

관련 문제