我有一个注册表值,它存储为包含文件路径信息的二进制值(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创建的。这是禁用的插件项(弹性)
的条目答案 0 :(得分:4)
嗯,它不是任意二进制数据 - 它是一些种编码中的文本数据。您需要找出编码是什么。
如果Encoding.Unicode.GetString(value)
有效,我不会感到惊讶 - 但如果没有,请发一个样本(十六进制),我会看到我能做什么。什么把数据放在那里的文件说什么?
编辑:看起来像Encoding.Unicode是你的朋友,但从字节12开始。使用
Encoding.Unicode.GetString(bytes, 12, bytes.Length-12)
答案 1 :(得分:1)
我也有这个问题,我就这样解决了:
我已将变量声明为:
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
所以在名为“ListRecent”的列表框中,我已经获得了最近的完整列表
答案 2 :(得分:0)
使用
Function Microsoft.Win32.RegistryKey.GetValue(name as String) as Object
另请参阅System.Text.Encoding
和System.Text.Encoding.Unicode