Come posso convertire un valore REG_BINARY dal registro in una stringa? (Vb.net)
-
20-08-2019 - |
Domanda
Ho un valore di registro che viene archiviato come valore binario (REG_BINARY) contenente informazioni su un percorso file. Il valore viene letto in un array di byte. Ma come posso trasformarlo in una stringa leggibile?
Ho letto di system.text.encoding.ASCII.GetString (valore) ma questo non funziona. Per quanto mi è venuto in mente che il valore del registro sono dati binari arbitrari e non ASCII, motivo per cui il metodo produce dati inutili.
Qualcuno sa come posso convertire i dati?
Esempio: (Un pezzo della voce)
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
A causa della regedit questo dovrebbe essere:
............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.\
La voce stessa è stata creata da Outlook. È una voce per un elemento aggiuntivo disabilitato (resilienza)
Soluzione
Beh, non sono dati binari arbitrari - sono dati di testo in alcuni tipi di codifica. Devi scoprire qual è la codifica.
Non sarei sorpreso se Encoding.Unicode.GetString (valore)
funzionasse - ma in caso contrario, pubblica un campione (in esadecimale) e vedrò cosa posso fare. Cosa dice la documentazione di qualunque cosa i dati ci siano?
EDIT: sembra che Encoding.Unicode sia tuo amico, ma a partire dal byte 12. Usa
Encoding.Unicode.GetString(bytes, 12, bytes.Length-12)
Altri suggerimenti
Ho avuto anche questo problema e ho risolto in questo modo:
Avevo dichiarato una variabile come:
Dim encoding As System.Text.Encoding = System.Text.Encoding.Unicode
Quindi lo faccio in un ciclo:
For Each Val As String In ValueName
data = k.GetValue(Val)
ListRecent.Items.Add(Val & ": " & encoding.GetString(data))
Next
Quindi nella casella di riepilogo chiamata " ListRecent " Ho ottenuto l'elenco completo dei recenti
Usa
Function Microsoft.Win32.RegistryKey.GetValue(name as String) as Object
Guarda anche System.Text.Encoding
e System.Text.Encoding.Unicode