UTF-8エンコードされたフィールド(varchar)を返すMS SQLクエリがあります。それを.NET Unicode文字列に変換するにはどうすればよいですか? UTF8Encoding.GetStringは、バイト配列を持っていれば仕事をしますが、私はそうしません。DataReaderのUTF-8からC#までの文字列
答えて
はこの質問から可能な解決策を適応:C# Convert string from UTF-8 to ISO-8859-1 (Latin1) H
var dbEnc = Encoding.UTF8;
var uniEnc = Encoding.Unicode;
byte[] dbBytes = dbEnc.GetBytes(dbString);
byte[] uniBytes = Encoding.Convert(dbEnc, uniEnc, dbBytes);
string msg = uniEnc.GetString(uniBytes);
は、このヘルプをしていますか?
私は問題は、プロバイダからフェッチされた文字列が既に混乱していることだと思います。 – Rob
Hmm。 DbDataReader.GetBytes(...)を使用してデータをバイト配列に読み込む方法はありますか?また、データベースに何が入るのかを制御できますか? それは、例えばDBデータとして、詳細およびコンテキストにあなたの質問を更新する価値があるかもしれ、あなたの現在のコードと端から出力される電流は、あなたが達成したいつながります。 – raveturned
私はオフィスに戻ったときにこれを行かせます。 – Rob
良い開始点:http://msdn.microsoft.com/en-us/library/kdcak6ye.aspx 元の文字列のバイト数を取得するには、System.Text.Encoding.UTF8.GetBytes()
メソッドを使用します。
ええと...文字列をバイト配列にエンコードし、それを再び文字列にデコードすることを提案しています可能な目的は何ですか? –
文字列から各文字を取り出し、それを使ってバイト配列を設定しようとしました。これは、ハイビット文字が既にUnicodeに対応していたため機能しませんでした。 – Rob
@Rob _Why_それを試しましたか?なぜ文字列をそのまま使うことができないのですか?あなたが話していない特定の問題はありますか? –
私はthe MSDN forumsから学んだことを適用しました。クエリは、varchar
、UTF-8エンコードされたテキスト、datetime
およびint
の値を返します。私は結果からCSVファイルを構築しています。
using (var sw = new StreamWriter(txtOutputFile, true, Encoding.UTF8))
{
while (r.Read())
{
var colCount = r.FieldCount;
var curCol = 1;
var utf8 = new UTF8Encoding();
var row = "";
if (r[0].GetType() == typeof(SqlString))
{
SqlString sqlString = r.GetSqlString(0);
Byte[] encodedBytes = sqlString.GetNonUnicodeBytes();
row = "\"" + utf8.GetString(encodedBytes) + "\"";
}
else
{
row = "\"" + r[0].ToString() + "\"";
}
while (curCol < colCount)
{
if (r[curCol].GetType() == typeof(SqlString))
{
SqlString sqlString = r.GetSqlString(curCol);
Byte[] encodedBytes = sqlString.GetNonUnicodeBytes();
row += ",\"" + utf8.GetString(encodedBytes) + "\"";
}
else
{
row += ",\"" + r[curCol].ToString() + "\"";
}
curCol += 1;
}
sw.WriteLine(row);
}
}
あなたがその内容UTF-16エンコードされていると誤って解釈されるC#string
を持っている場合、あなたは根本的なバイト再解釈できます:あなたはSqlDataReader
へのアクセス権を持っている場合は、しかし、
public static string InterpretAsUTF8(string value)
{
byte[] rawData = Encoding.Default.GetBytes(value);
string reencoded = Encoding.UTF8.GetString(rawData);
return reencoded;
}
を@CarlSteffenのように、あなたはこれを行うことができます:
//Assuming the column index you're interested in is 1:
SqlString utf8EncodedString = reader.GetSqlString(1);
string expectedResult = Encoding.UTF8.GetString(utf8EncodedString.GetNonUnicodeBytes());
- 1. DataReader列からのカンマ区切り文字列
- 2. 文字列/ UTF8の問題
- 3. Javaの:UTF8文字列
- 4. iPhone、間違った文字をUTF8からXML文字列
- 5. mb_strtolowerとUTF8文字列
- 6. UTF8バイト[]から文字列への変換
- 7. babel:オクテットから文字列への無効化INVALID-UTF8-CONTINUATION-BYTE
- 8. CのUTF8文字列関数の内容(
- 9. UTF8 C文字列のCFStringTokenizerのトークン範囲
- 10. 文字列UTF8エンコードの問題
- 11. SWIGはC#でutf8文字列を処理する方法は?
- 12. UTF8文字列の文字数のカウント数?
- 13. C++、文字列から文字配列への変換
- 14. Objective-Cの文字列から文字列を抽出する
- 15. 文字をCの文字列から別の文字列にコピー
- 16. 無効なutf8文字列の例ですか?
- 17. char * C#の文字列からのポインタ
- 18. NSXMLParserからUTF8文字をデコードできません
- 19. 文字列からコントロールカー以外の印刷可能なutf8文字を削除します。
- 20. QLPreviewControllerとUTF8文字
- 21. latin1文字列をutf8に変換しますか?
- 22. 無効なUTF8 perl文字列を作成しますか?
- 23. UTF8文字列から英数字以外の文字を削除する正規表現
- 24. json.netから受信したutf8文字列を正しく処理します。
- 25. C文字列から文字列を取り除く
- 26. 文字列処理エラー:UnicodeDecodeError: 'utf8'コーデックがデコードできません
- 27. utf8文字列からutf8以外の同等の文字を取得するにはどうすればよいですか?
- 28. utf8でのスフィンクスの文字セットテーブル
- 29. 標準Cの文字列から文字を削除する
- 30. 文字列から文字列の後に文字列を取得します
あなたは何バイト持っていますか?文字列の場合は、データベースまたはADO.NETプロバイダによって既にデコードされている可能性があります。 –
あなたは何を持っていますか? SQL文字列を.NET文字列に変換する必要はないと思います。 –
これはvarchar ...だからdatareaderまでの文字列 – Rob