Pregunta

Tengo un valor de registro que se almacena como un valor binario (REG_BINARY) que contiene información sobre una ruta de archivo. El valor se lee en una matriz de bytes. Pero, ¿cómo puedo transformarlo en una cadena legible?

He leído sobre system.text.encoding.ASCII.GetString (value) pero esto no funciona. Hasta donde supe, el valor del registro son datos binarios arbitrarios y no ASCII, que es la razón por la cual el método produce datos inútiles.

¿Alguien sabe cómo puedo convertir los datos?

Muestra: (Una parte de la entrada)

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

Debido a la regedit se supone que esto es:

............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 entrada en sí fue creada desde Outlook. Es una entrada para un elemento de complemento deshabilitado (resistencia)

¿Fue útil?

Solución

Bueno, no son datos binarios arbitrarios , son datos de texto en algún tipo de codificación. Necesita saber cuál es la codificación.

No me sorprendería si Encoding.Unicode.GetString (value) funcionara, pero si eso no funciona, publique una muestra (en hexadecimal) y veré lo que pueda hacer. ¿Qué dice la documentación de lo que sea que haya puesto los datos allí?

EDITAR: Parece que codifica. Unicode es tu amigo, pero a partir del byte 12. Usa

Encoding.Unicode.GetString(bytes, 12, bytes.Length-12)

Otros consejos

También tuve este problema y lo resolví de esta manera:

Había declarado una variable como:

Dim encoding As System.Text.Encoding = System.Text.Encoding.Unicode

Luego hago esto en un bucle:

    For Each Val As String In ValueName
        data = k.GetValue(Val)
        ListRecent.Items.Add(Val & ": " & encoding.GetString(data))
    Next

Entonces, en el cuadro de lista llamado " ListRecent " He obtenido la lista completa de recientes

Uso

Function Microsoft.Win32.RegistryKey.GetValue(name as String) as Object

Observe también System.Text.Encoding y System.Text.Encoding.Unicode

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top