web-dev-qa-db-ja.com

SQL Server varBinaryデータを文字列C#に変換する

varBinary(max)に設定されているSQL Serverテーブル列から入力されるデータを文字列に変換して、ラベル。

これはC#にあり、私はDataReaderを使用しています。

以下を使用してデータをプルできます。

var BinaryString = reader[1];

この列には、以前にバイナリに変換されたテキストが含まれていることを知っています。

18

文字列からバイナリに最初に変換したときに使用されたエンコーディングに依存します。

 byte[] binaryString = (byte[])reader[1];

 // if the original encoding was ASCII
 string x = Encoding.ASCII.GetString(binaryString);

 // if the original encoding was UTF-8
 string y = Encoding.UTF8.GetString(binaryString);

 // if the original encoding was UTF-16
 string z = Encoding.Unicode.GetString(binaryString);

 // etc
36
LukeH

バイナリデータはエンコードされたテキストである必要があります。正確にテキストに変換するには、どのエンコードが使用されたかを知る必要があります。したがって、たとえば、次を使用できます。

byte[] binaryData = reader[1];
string text = Encoding.UTF8.GetString(binaryData);

または

byte[] binaryData = reader[1];
string text = Encoding.Unicode.GetString(binaryData);

または他のさまざまなオプション...しかし、あなたは正しいエンコーディングを知る必要があります。それ以外の場合、JPEGファイルをPNGのみを読み取る画像ビューアーにロードしようとしているようなものですが、さらに悪いことに、エンコードが間違っているとappearが一部の文字列で機能する可能性があります。

次に解決するのは、最初にバイナリとして保存される理由です...それがテキストであることを意図している場合、なぜそのように保存されないのですか?.

9
Jon Skeet

バイナリの作成に使用されたエンコーディングを知る必要があります。その後、使用することができます

System.Text.Encoding.UTF8.GetString(reader[1]);

使用されたエンコーディングに応じてUTF8を変更します。

2
Chris Haas