2009-08-13 19 views
2

C#では、テキストファイルからSQL文を挿入し、ADO.NETを使用してデータベース上でそれらを実行しようとしています。いくつかのクエリには、列の1つにギリシャ語の文字が含まれています。具体的には、マイクロ秒(usec)で使用されるMu(ファンキーな見た目u)。問題は疑問符が実際にデータベースに挿入されていることです(秒)。しかし、私は、デバッガがダイヤモンドの内側に疑問符を表示しているので、テキストファイルの読み込みに問題があると感じています。私は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); 
    } 
} 

データベースに挿入しよう:自分のUnicodeエンコーディングの面で、文字列内の文字をプリントアウトしてファイルを読み込みます。そうすれば、後でデータベースが「間違っている」ように見える場合、問題はファイルへのアクセスではなくデータベースへのアクセスであることがわかります。

+0

それはやっているようでした。しかし、私はこのエンコーディング全体を理解しているのか分かりません。異なるデフォルトのエンコーディングを持つ別のユーザーがファイルを変更した場合、新しいファイルでアプリを再実行しようとするとどうなりますか?それはもはや機能しませんか?代わりにEncoding.UTF8を使用する必要がありますか? – bsh152s

+0

UTF-8を使用する方がはるかに良いアイデアですが、エンコーディングが本当に何であるかを常に知っておく必要があります。ファイルを常にUTF-8として保存することができますか? –

2

は、次の3つのことをチェックする必要があります。

  1. あなたはStreamReaderを
  2. 、データベース・サーバー上のカラム型(nvarchar型ではなく、varchar型)に有効な
  3. 照合開くときに使用するエンコーディング列

これらのいずれかが間違っていると、DBからデータを読み戻すときに間違った値が返されます。

関連する問題