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)

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top