EVOLUTION-MANAGER
Edit File: base64.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>R: Encode/Decode base64 content</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="stylesheet" type="text/css" href="R.css" /> </head><body> <table width="100%" summary="page for base64 {RCurl}"><tr><td>base64 {RCurl}</td><td style="text-align: right;">R Documentation</td></tr></table> <h2>Encode/Decode base64 content</h2> <h3>Description</h3> <p>These functions encode and decode strings using base64 representations. <code>base64</code> can be used as a single entry point with an argument to encode or decode. The other two functions perform the specific action. </p> <h3>Usage</h3> <pre> base64(txt, encode = !inherits(txt, "base64"), mode = "character") </pre> <h3>Arguments</h3> <table summary="R argblock"> <tr valign="top"><td><code>txt</code></td> <td> <p>character string to encode or decode</p> </td></tr> <tr valign="top"><td><code>encode</code></td> <td> <p>logical value indicating whether the desired action is to encode or decode the object. If <code>txt</code> has (S3) class <code>base64</code>, the default is to decode this. </p> </td></tr> <tr valign="top"><td><code>mode</code></td> <td> <p>a character string which is either "raw" or "character". This controls the type of vector that is returned. If this is "raw", a raw vector is created. Otherwise, a character vector of length 1 is returned and its element is the text version of the original data given in <code>txt</code>. </p> </td></tr> </table> <h3>Details</h3> <p>This calls the routines in libcurl. These are not declared in the curl header files. So the support may need to be handled carefully on some platforms, e.g. Microsoft Windows. </p> <h3>Value</h3> <p>If encode is <code>TRUE</code>, a character vector with a class named <code>base64</code>. If decode is <code>TRUE</code>, a simple string. </p> <h3>Note</h3> <p>This is currently not vectorized. </p> <p>We might extend this to work with raw objects. </p> <h3>Author(s)</h3> <p>Duncan Temple Lang</p> <h3>References</h3> <p>libcurl - <a href="http://curl.haxx.se">http://curl.haxx.se</a> Wikipedia's explanation of base 64 encoding - <a href="http://en.wikipedia.org/wiki/Base64">http://en.wikipedia.org/wiki/Base64</a> </p> <h3>Examples</h3> <pre> # encode and then decode a simple string. txt = "Some simple text for base 64 to handle" x = base64(txt) base64(x) # encode to a raw vector x = base64("Simple text", TRUE, "raw") # decode to a character string. ans = base64Decode(x) ans == txt # decoded to a raw format. ans = base64Decode(x, "raw") # Binary data # f = paste(R.home(), "doc", "html", "logo.jpg", sep = .Platform$file.sep) f = system.file("examples", "logo.jpg", package = "RCurl") img = readBin(f, "raw", file.info(f)[1, "size"]) b64 = base64Encode(img, "raw") back = base64Decode(b64, "raw") identical(img, back) # alternatively, we can encode to a string and then decode back again # to raw and see that we preserve the date. enc = base64Encode(img, "character") dec = base64Decode(enc, "raw") identical(img, dec) # The following would be the sort of computation we could do if we # could have in-memory raw connections. # We would save() some objects to such an in-memory binary/raw connection # and then encode the resulting raw vector into a character vector. # Then we can insert that into a message, e.g. an email message or # an XML document and when we receive it in a different R session # we would get the string and reverse the encoding from the string to # a raw vector # In the absence of that in-memory connection facility in save(), # we can use a file. x = 1:10 # save two objects - a function and a vector f = paste(tempfile(), "rda", sep = ".") save(base64, x, file = f) # now read the results back from that file as a raw vector data = readBin(f, "raw", file.info(f)[1,"size"]) # base64 encode it txt = base64Encode(data, "character") if(require(XML)) { tt = xmlTree("r:data", namespaces = c(r = "http://www.r-project.org")) tt$addNode(newXMLTextNode(txt)) out = saveXML(tt) doc = xmlRoot(xmlTreeParse(out, asText = TRUE)) rda = base64Decode(xmlValue(doc), "raw") f = tempfile() writeBin(rda, f) e = new.env() load(f, e) objects(e) } # we'd like to be able to do # con = rawConnection(raw(), 'r+') # save(base64, x, file = con) # txt = base64Encode(rawConnectionValue(con), "character") # ... write and read xml stuff # val = xmlValue(doc) # rda = base64Decode(val, "raw") # e = new.env() # input = rawConnection(o, "r") # load(input, e) </pre> <hr /><div style="text-align: center;">[Package <em>RCurl</em> version 1.98-1.2 <a href="00Index.html">Index</a>]</div> </body></html>