Comment puis-je convertir une valeur REG_BINARY à partir du Registre en une chaîne? (vb.net)
-
20-08-2019 - |
Question
J'ai une valeur de registre qui est stockée en tant que valeur binaire (REG_BINARY) contenant des informations sur un chemin de fichier. La valeur est lue dans un tableau d'octets. Mais comment puis-je le transformer en une chaîne lisible?
J'ai lu un article sur system.text.encoding.ASCII.GetString (valeur) mais cela ne fonctionne pas. Autant que je sache, la valeur de registre est constituée de données binaires arbitraires et non d’ASCII, ce qui explique pourquoi la méthode produit des données inutiles.
Est-ce que quelqu'un sait comment je peux convertir les données?
Exemple: (Un morceau de l'entrée)
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
En raison du regedit, ceci est supposé être:
............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.\
L'entrée elle-même a été créée à partir d'Outlook. C'est une entrée pour un complément désactivé (résilience)
La solution
Eh bien, ce ne sont pas des données arbitraires arbitraires - ce sont des données texte dans un type de codage. Vous devez savoir quel est le codage.
Je ne serais pas surpris si Encoding.Unicode.GetString (valeur)
fonctionne - mais si cela ne fonctionne pas, envoyez un exemple (en hex) et je verrai ce que je peux. faire. Que dit la documentation de tout ce qui contient les données?
EDIT: il ressemble à Encoding.Unicode est votre ami, mais à partir de l'octet 12. Utilisez
Encoding.Unicode.GetString(bytes, 12, bytes.Length-12)
Autres conseils
J'ai eu ce problème aussi et j'ai résolu de cette façon:
J'avais déclaré une variable comme suit:
Dim encoding As System.Text.Encoding = System.Text.Encoding.Unicode
Ensuite, je le fais en boucle:
For Each Val As String In ValueName
data = k.GetValue(Val)
ListRecent.Items.Add(Val & ": " & encoding.GetString(data))
Next
Dans la zone de liste appelée "ListRecent " J'ai obtenu la liste complète des récents
Utiliser
Function Microsoft.Win32.RegistryKey.GetValue(name as String) as Object
Regardez également System.Text.Encoding
et System.Text.Encoding.Unicode