レジストリのREG_BINARY値を文字列に変換するにはどうすればよいですか? (vb.net)
-
20-08-2019 - |
質問
ファイルパスに関する情報を保持するバイナリ値(REG_BINARY)として保存されているレジストリ値があります。値はバイト配列に読み取られます。しかし、どうすればそれを読み取り可能な文字列に変換できますか?
system.text.encoding.ASCII.GetString(value)について読みましたが、これは機能しません。私が知る限り、レジストリ値はASCIIではなく、任意のバイナリデータであり、これがメソッドが無用なデータを生成する理由です。
データを変換する方法を知っている人はいますか?
サンプル: (エントリの一部)
01 00 00 00 94 00 00 00 14 00 00 00 63 00 3A 00 5C 00
70 00 72 00 6F 00 67 00 72 00 61 00 6D 00 6d 00 65 00
5C 00 67 00 65 00 6D 00 65 00 69 00 6E 00 73 00 61 00
6D 00 65 00 20 00 64 00 61 00 74 00 65 00 69 00 65 00
6E 00 5C
regeditにより、これは次のようになります。
............c.:.\.p.r.o.g.r.a.m.m.e.\.g.e.m.e.i.n.s.a.m.e. .d.a.t.e.i.e.n.\
エントリ自体はOutlookから作成されました。無効なアドインアイテム(復元性)のエントリです
解決
まあ、それは任意のバイナリデータではありません-それは何らかのエンコーディングのテキストデータです。エンコーディングが何であるかを知る必要があります。
Encoding.Unicode.GetString(value)
が機能していても驚かないでしょうが、機能しない場合は、サンプル(16進数)を投稿してください。そこにデータを入れるもののドキュメントは何と言っていますか?
編集:Encoding.Unicodeがあなたの友人のように見えますが、バイト12から開始します。
Encoding.Unicode.GetString(bytes, 12, bytes.Length-12)
他のヒント
私もこの問題を抱えていたので、この方法で解決しました:
変数を次のように宣言しました:
Dim encoding As System.Text.Encoding = System.Text.Encoding.Unicode
次に、これをループで行います:
For Each Val As String In ValueName
data = k.GetValue(Val)
ListRecent.Items.Add(Val & ": " & encoding.GetString(data))
Next
つまり、リストボックスでは<!> quot; ListRecent <!> quot;最近の完全なリストを取得しました
使用
Function Microsoft.Win32.RegistryKey.GetValue(name as String) as Object
System.Text.Encoding
およびSystem.Text.Encoding.Unicode