net decodificar convertir como codificacion archivo ruby base64

ruby - convertir - como decodificar base64



Decodificar la cadena base64 y escribir en el archivo (1)

No sé cómo se las arregla para hacer esto, pero los finales de línea /r/n en su cadena parecen estar ahí como secuencias de caracteres de 4 bytes, no como CRLF escapado de 2 bytes. Si copio su archivo en una cadena de rubí con un solo ticks:

unescaped=''PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48cmV2aWV3LWNhc2UgY3JlYXRl/r/nZGF0ZT0iMTMvTWFyLzIwMTQgMDk6MDQ6NTEiIHN5c3RlbT0iVHJhZmlndXJhX1RlbXBsYXRlX01h/r/nbmFnZW1lbnRfdjUuMSIgYmF0Y2hpZD0iMCIgdHJhbnNhY3Rpb25ubz0iMSIgYmF0Y2huYW1lPSJH'' Base64.decode64(unescaped) #=> garbled text for every second line

Si hago lo mismo con comillas dobles (que respetan las secuencias de escape):

escaped="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48cmV2aWV3LWNhc2UgY3JlYXRl/r/nZGF0ZT0iMTMvTWFyLzIwMTQgMDk6MDQ6NTEiIHN5c3RlbT0iVHJhZmlndXJhX1RlbXBsYXRlX01h/r/nbmFnZW1lbnRfdjUuMSIgYmF0Y2hpZD0iMCIgdHJhbnNhY3Rpb25ubz0iMSIgYmF0Y2huYW1lPSJH" Base64.decode64(escaped) #=> all is well that ends well

Por lo tanto, el problema parece ocurrir al escribir el archivo. Se puede modificar en Ruby sin embargo:

unescaped=''PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48cmV2aWV3LWNhc2UgY3JlYXRl/r/nZGF0ZT0iMTMvTWFyLzIwMTQgMDk6MDQ6NTEiIHN5c3RlbT0iVHJhZmlndXJhX1RlbXBsYXRlX01h/r/nbmFnZW1lbnRfdjUuMSIgYmF0Y2hpZD0iMCIgdHJhbnNhY3Rpb25ubz0iMSIgYmF0Y2huYW1lPSJH'' Base64.decode64(unescaped) escaped=unescaped.gsub(''//r'', "/r").gsub(''//n'', "/n") Base64.decode64(escaped) #=> now you should be fine again

pero, por supuesto, la solución correcta sería almacenar el archivo correctamente.

Dado su archivo actual, lo siguiente debería funcionar:

require "base64" content = File.read(''Input.txt'') content.gsub!(''//r'', "/r") content.gsub!(''//n'', "/n") decode_base64_content = Base64.decode64(content) File.open("Output.txt", "wb") do |f| f.write(decode_base64_content) end

Por favor, publicar algo de salida si no lo hace.

Estoy intentando leer el archivo que contiene la cadena codificada en base64 y escribir la salida descodificada en otro archivo. My Input.txt contiene una cadena base64, algo como:

PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48cmV2aWV3LWNhc2UgY3JlYXRl/r/nZGF0ZT0iMTMvTWFyLzIwMTQgMDk6MDQ6NTEiIHN5c3RlbT0iVHJhZmlndXJhX1RlbXBsYXRlX01h/r/nbmFnZW1lbnRfdjUuMSIgYmF0Y2hpZD0iMCIgdHJhbnNhY3Rpb25ubz0iMSIgYmF0Y2huYW1lPSJH/r/nVUlEKGY1NWRmYjgwODQ4ZDQ3YzliZmVhYTg3YzMyZDQyNDQyKS1HTE9CQUxfSU5WT0lDRS1FTkdM/r/nSVNIIiB2ZXJzaW9uPSI1LjEuMi44ICBidWlsZCA1MjUzOSI+PHRyYW5zYWN0aW9uPjxvYmplY3Rz/r/nPjxvYmplY3QgY2xhc3M9IlRoXzE5NTQwMDk3OTRfNl9tb2RlbCIgbmFtZT0ibW9kZWwiPjxwcm9w/r/nZXJ0eSBuYW1lPSJUaXRsZSIgdmFsdWU9IlByb3Zpc2lvbmFsIEludm9pY2UiLz48cHJvcGVydHkg/r/nbmFtZT0iR3JvdXBDb21wYW55Ij48b2JqZWN0IGNsYXNzPSJUaF8xOTU0MDA5Nzk0XzZfR3JvdXBD/r/nb21wYW55IiBuYW1lPSJHcm91cENvbXBhbnkiPjxwcm9wZXJ0eSBuYW1lPSJOYW1lIiB2YWx1ZT0i/r/nVHJhZmlndXJhIEJlaGVlciBCLlYuIEFNU1RFUkRBTSwgQlJBTkNIIE9GRklDRSBMVUNFUk5FIi8+/r/nPHByb3BlcnR5IG5hbWU9IkFkZHJlc3MiIHZhbHVlPSJaPz9yaWNoc3RyYXNzZSAzMSIgaW5kZXg9/r/nIjAiLz48cHJvcGVydHkgbmFtZT0iQWRkcmVzcyIgdmFsdWU9Ikx1Y2VybmUiIGluZGV4PSIxIi8+/r/nPHByb3BlcnR5IG5hbWU9IkFkZHJlc3MiIHZhbHVlPSI2MDAyIiBpbmRleD0iMiIvPjxwcm9wZXJ0/r/neSBuYW1lPSJBZGRyZXNzIiB2YWx1ZT0iU3dpdHplcmxhbmQiIGluZGV4PSIzIi8+PHByb3BlcnR5/r/nIG5hbWU9IlBob25lTnVtYmVyIiB2YWx1

Esta cadena se crea en el lado del servidor con la biblioteca Java apache codec.binary.Base64. Esta cadena se captura con Fiddler cuando dos servicios web diferentes se comunican entre sí. A veces no tengo acceso a otro servicio web, por eso detecto mensajes entre servicios. Además, utilizo Ruby para automatizar algunas tareas de rutina y esta vez decidí usar Ruby nuevamente. Para codificar la cadena base64 capturada, uso el siguiente fragmento de código:

require "base64" content = File.read(''Input.txt'') decode_base64_content = Base64.decode64(content) File.open("Output.txt", "wb") do |f| f.write(decode_base64_content) end

Pero la salida se ve mal formada, como <?xml version="1.0" encoding="UTF-8"?><review-case create®vFFSТ#2фЦ"у#B“ЈCЈS"7—7FVУТ%G&f–wW&хFVЧЖFUфЦзnagement_v5.1" ba y así sucesivamente. ¿Puede por favor asesorarme sobre lo que estoy haciendo mal? Uso Ruby 1.9.3 en Windows 7 y Ubuntu 12.04.