pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

    <i id='DdnzR'><tr id='DdnzR'><dt id='DdnzR'><q id='DdnzR'><span id='DdnzR'><b id='DdnzR'><form id='DdnzR'><ins id='DdnzR'></ins><ul id='DdnzR'></ul><sub id='DdnzR'></sub></form><legend id='DdnzR'></legend><bdo id='DdnzR'><pre id='DdnzR'><center id='DdnzR'></center></pre></bdo></b><th id='DdnzR'></th></span></q></dt></tr></i><div class="mqskcqi" id='DdnzR'><tfoot id='DdnzR'></tfoot><dl id='DdnzR'><fieldset id='DdnzR'></fieldset></dl></div>
    • <bdo id='DdnzR'></bdo><ul id='DdnzR'></ul>

    <small id='DdnzR'></small><noframes id='DdnzR'>

    <tfoot id='DdnzR'></tfoot>

        <legend id='DdnzR'><style id='DdnzR'><dir id='DdnzR'><q id='DdnzR'></q></dir></style></legend>

        使用 Javascript 檢索二進制文件內容,base64 對其進

        Retrieving binary file content using Javascript, base64 encode it and reverse-decode it using Python(使用 Javascript 檢索二進制文件內容,base64 對其進行編碼并使用 Python 對其進行反向解碼) - IT屋-程序員軟件開

        <small id='SrCWO'></small><noframes id='SrCWO'>

          <tbody id='SrCWO'></tbody>
          <bdo id='SrCWO'></bdo><ul id='SrCWO'></ul>
              <legend id='SrCWO'><style id='SrCWO'><dir id='SrCWO'><q id='SrCWO'></q></dir></style></legend>

              <i id='SrCWO'><tr id='SrCWO'><dt id='SrCWO'><q id='SrCWO'><span id='SrCWO'><b id='SrCWO'><form id='SrCWO'><ins id='SrCWO'></ins><ul id='SrCWO'></ul><sub id='SrCWO'></sub></form><legend id='SrCWO'></legend><bdo id='SrCWO'><pre id='SrCWO'><center id='SrCWO'></center></pre></bdo></b><th id='SrCWO'></th></span></q></dt></tr></i><div class="m2m4iwq" id='SrCWO'><tfoot id='SrCWO'></tfoot><dl id='SrCWO'><fieldset id='SrCWO'></fieldset></dl></div>
                  <tfoot id='SrCWO'></tfoot>
                  本文介紹了使用 Javascript 檢索二進制文件內容,base64 對其進行編碼并使用 Python 對其進行反向解碼的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                  問題描述

                  我正在嘗試使用 XMLHttpRequest(使用最近的 Webkit)下載二進制文件,并使用這個簡單的函數對其內容進行 base64 編碼:

                  I'm trying to download a binary file using XMLHttpRequest (using a recent Webkit) and base64-encode its contents using this simple function:

                  function getBinary(file){
                      var xhr = new XMLHttpRequest();  
                      xhr.open("GET", file, false);  
                      xhr.overrideMimeType("text/plain; charset=x-user-defined");  
                      xhr.send(null);
                      return xhr.responseText;
                  }
                  
                  function base64encode(binary) {
                      return btoa(unescape(encodeURIComponent(binary)));
                  }
                  
                  var binary = getBinary('http://some.tld/sample.pdf');
                  var base64encoded = base64encode(binary);
                  

                  附帶說明,以上所有內容都是標準的 Javascript 內容,包括 btoa()encodeURIComponent():https://developer.mozilla.org/en/DOM/window.btoa

                  As a side note, everything above is standard Javascript stuff, including btoa() and encodeURIComponent(): https://developer.mozilla.org/en/DOM/window.btoa

                  這很順利,我什至可以使用 Javascript 解碼 base64 內容:

                  This works pretty smoothly, and I can even decode the base64 contents using Javascript:

                  function base64decode(base64) {
                      return decodeURIComponent(escape(atob(base64)));
                  }
                  
                  var decodedBinary = base64decode(base64encoded);
                  decodedBinary === binary // true
                  

                  現在,我想使用 Python 解碼 base64 編碼的內容,它使用一些 JSON 字符串來獲取 base64encoded 字符串值.天真地這就是我所做的:

                  Now, I want to decode the base64-encoded contents using Python which consume some JSON string to get the base64encoded string value. Naively this is what I do:

                  import urllib
                  import base64
                  # ... retrieving of base64 encoded string through JSON
                  base64 = "77+9UE5HDQ……………oaCgA="
                  source_contents = urllib.unquote(base64.b64decode(base64))
                  destination_file = open(destination, 'wb')
                  destination_file.write(source_contents)
                  destination_file.close()
                  

                  但生成的文件無效,看起來操作與 UTF-8、編碼或我仍然不清楚的東西混淆了.

                  But the resulting file is invalid, looks like the operation's messaed up with UTF-8, encoding or something which is still unclear to me.

                  如果我嘗試在將 UTF-8 內容放入目標文件之前對其進行解碼,則會引發錯誤:

                  If I try to decode UTF-8 contents before putting them in the destination file, an error is raised:

                  import urllib
                  import base64
                  # ... retrieving of base64 encoded string through JSON
                  base64 = "77+9UE5HDQ……………oaCgA="
                  source_contents = urllib.unquote(base64.b64decode(base64)).decode('utf-8')
                  destination_file = open(destination, 'wb')
                  destination_file.write(source_contents)
                  destination_file.close()
                  
                  $ python test.py
                  // ...
                  UnicodeEncodeError: 'ascii' codec can't encode character u'ufffd' in position 0: ordinal not in range(128)
                  

                  附帶說明,這是同一文件的兩個文本表示形式的屏幕截圖;左側:原件;右側:從 base64 解碼字符串創建的字符串:http://cl.ly/0U3G34110z3c132O2e2x

                  As a side note, here's a screenshot of two textual representations of a same file; on left: the original; on right: the one created from the base64-decoded string: http://cl.ly/0U3G34110z3c132O2e2x

                  在嘗試重新創建文件時,是否有已知的技巧來規避這些編碼問題?您自己將如何實現這一目標?

                  Is there a known trick to circumvent these problems with encoding when attempting to recreating the file? How would you achieve this yourself?

                  非常感謝任何幫助或提示:)

                  Any help or hint much appreciated?:)

                  推薦答案

                  所以我在回答自己——對此感到抱歉——但我認為這對像我這樣迷失的人可能有用;)

                  So I'm answering to myself — and sorry for that?— but I think it might be useful for someone as lost as I was?;)

                  所以你必須使用 ArrayBuffer 并設置 responseType XMLHttpRequest 對象實例的屬性到 arraybuffer 用于檢索原生字節數組,可以使用以下便捷函數將其轉換為 base64(找到 那里,作者在這里可能有福了):

                  So you have to use ArrayBuffer and set the responseType property of your XMLHttpRequest object instance to arraybuffer for retrieving a native array of Bytes, which can be converted to base64 using the following convenient function (found there, author may be blessed here):

                  function base64ArrayBuffer(arrayBuffer) {
                    var base64    = ''
                    var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
                  
                    var bytes         = new Uint8Array(arrayBuffer)
                    var byteLength    = bytes.byteLength
                    var byteRemainder = byteLength % 3
                    var mainLength    = byteLength - byteRemainder
                  
                    var a, b, c, d
                    var chunk
                  
                    // Main loop deals with bytes in chunks of 3
                    for (var i = 0; i < mainLength; i = i + 3) {
                      // Combine the three bytes into a single integer
                      chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]
                  
                      // Use bitmasks to extract 6-bit segments from the triplet
                      a = (chunk & 16515072) >> 18 // 16515072 = (2^6 - 1) << 18
                      b = (chunk & 258048)   >> 12 // 258048   = (2^6 - 1) << 12
                      c = (chunk & 4032)     >>  6 // 4032     = (2^6 - 1) << 6
                      d = chunk & 63               // 63       = 2^6 - 1
                  
                      // Convert the raw binary segments to the appropriate ASCII encoding
                      base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d]
                    }
                  
                    // Deal with the remaining bytes and padding
                    if (byteRemainder == 1) {
                      chunk = bytes[mainLength]
                  
                      a = (chunk & 252) >> 2 // 252 = (2^6 - 1) << 2
                  
                      // Set the 4 least significant bits to zero
                      b = (chunk & 3)   << 4 // 3   = 2^2 - 1
                  
                      base64 += encodings[a] + encodings[b] + '=='
                    } else if (byteRemainder == 2) {
                      chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1]
                  
                      a = (chunk & 64512) >> 10 // 64512 = (2^6 - 1) << 10
                      b = (chunk & 1008)  >>  4 // 1008  = (2^6 - 1) << 4
                  
                      // Set the 2 least significant bits to zero
                      c = (chunk & 15)    <<  2 // 15    = 2^4 - 1
                  
                      base64 += encodings[a] + encodings[b] + encodings[c] + '='
                    }
                  
                    return base64
                  }
                  

                  所以這是一個有效的代碼:

                  So here's a working code:

                  var xhr = new XMLHttpRequest();
                  xhr.open('GET', 'http://some.tld/favicon.png', false);
                  xhr.responseType = 'arraybuffer';
                  xhr.onload = function(e) {
                      console.log(base64ArrayBuffer(e.currentTarget.response));
                  };
                  xhr.send();
                  

                  這將記錄一個有效表示二進制文件內容的base64編碼字符串.

                  This will log a valid base64 encoded string representing the binary file contents.

                  對于無法訪問 ArrayBuffer 并且 btoa() 編碼字符失敗的舊瀏覽器,這是另一種獲取任何二進制文件的 base64 編碼版本:

                  For older browsers not having access to ArrayBuffer and having btoa() failing on encoding characters, here's another way to get a base64 encoded version of any binary:

                  function getBinary(file){
                      var xhr = new XMLHttpRequest();
                      xhr.open("GET", file, false);
                      xhr.overrideMimeType("text/plain; charset=x-user-defined");
                      xhr.send(null);
                      return xhr.responseText;
                  }
                  
                  function base64Encode(str) {
                      var CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
                      var out = "", i = 0, len = str.length, c1, c2, c3;
                      while (i < len) {
                          c1 = str.charCodeAt(i++) & 0xff;
                          if (i == len) {
                              out += CHARS.charAt(c1 >> 2);
                              out += CHARS.charAt((c1 & 0x3) << 4);
                              out += "==";
                              break;
                          }
                          c2 = str.charCodeAt(i++);
                          if (i == len) {
                              out += CHARS.charAt(c1 >> 2);
                              out += CHARS.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
                              out += CHARS.charAt((c2 & 0xF) << 2);
                              out += "=";
                              break;
                          }
                          c3 = str.charCodeAt(i++);
                          out += CHARS.charAt(c1 >> 2);
                          out += CHARS.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
                          out += CHARS.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
                          out += CHARS.charAt(c3 & 0x3F);
                      }
                      return out;
                  }
                  
                  console.log(base64Encode(getBinary('http://www.google.fr/images/srpr/logo3w.png')));
                  

                  希望這能像對我一樣幫助其他人.

                  Hope this helps others as it did for me.

                  這篇關于使用 Javascript 檢索二進制文件內容,base64 對其進行編碼并使用 Python 對其進行反向解碼的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                  【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                  相關文檔推薦

                  Browser waits for ajax call to complete even after abort has been called (jQuery)(即使在調用 abort (jQuery) 之后,瀏覽器也會等待 ajax 調用完成)
                  JavaScript innerHTML is not working for IE?(JavaScript innerHTML 不適用于 IE?)
                  XMLHttpRequest cannot load, No #39;Access-Control-Allow-Origin#39; header is present on the requested resource(XMLHttpRequest 無法加載,請求的資源上不存在“Access-Control-Allow-Origin標頭) - IT屋-程序員軟件開發技術分
                  Is it possible for XHR HEAD requests to not follow redirects (301 302)(XHR HEAD 請求是否有可能不遵循重定向 (301 302))
                  XMLHttpRequest 206 Partial Content(XMLHttpRequest 206 部分內容)
                  Restrictions of XMLHttpRequest#39;s getResponseHeader()?(XMLHttpRequest 的 getResponseHeader() 的限制?)
                  <legend id='p3Kje'><style id='p3Kje'><dir id='p3Kje'><q id='p3Kje'></q></dir></style></legend>

                  <small id='p3Kje'></small><noframes id='p3Kje'>

                    <tbody id='p3Kje'></tbody>
                  • <tfoot id='p3Kje'></tfoot>

                          <i id='p3Kje'><tr id='p3Kje'><dt id='p3Kje'><q id='p3Kje'><span id='p3Kje'><b id='p3Kje'><form id='p3Kje'><ins id='p3Kje'></ins><ul id='p3Kje'></ul><sub id='p3Kje'></sub></form><legend id='p3Kje'></legend><bdo id='p3Kje'><pre id='p3Kje'><center id='p3Kje'></center></pre></bdo></b><th id='p3Kje'></th></span></q></dt></tr></i><div class="maq0emw" id='p3Kje'><tfoot id='p3Kje'></tfoot><dl id='p3Kje'><fieldset id='p3Kje'></fieldset></dl></div>
                            <bdo id='p3Kje'></bdo><ul id='p3Kje'></ul>
                            主站蜘蛛池模板: 内六角扳手「厂家」-温州市威豪五金工具有限公司 | TYPE-C厂家|TYPE-C接口|TYPE-C防水母座|TYPE-C贴片-深圳步步精 | 旋转/数显粘度计-运动粘度测定仪-上海平轩科学仪器 | 没斑啦-专业的祛斑美白嫩肤知识网站-去斑经验分享 | 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 南京泽朗生物科技有限公司-液体饮料代加工_果汁饮料代加工_固体饮料代加工 | 喷涂流水线,涂装流水线,喷漆流水线-山东天意设备科技有限公司 | 地图标注-手机导航电子地图如何标注-房地产商场地图标记【DiTuBiaoZhu.net】 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 带式压滤机_污泥压滤机_污泥脱水机_带式过滤机_带式压滤机厂家-河南恒磊环保设备有限公司 | 卫生型双针压力表-高温防腐差压表-安徽康泰电气有限公司 | 杭州火蝠电商_京东代运营_拼多多全托管代运营【天猫代运营】 | 乐泰胶水_loctite_乐泰胶_汉高乐泰授权(中国)总代理-鑫华良供应链 | 江西高职单独招生-江西单招考试-江西高职单招网 | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 北京亦庄厂房出租_经开区产业园招商信息平台 | 右手官网|右手工业设计|外观设计公司|工业设计公司|产品创新设计|医疗产品结构设计|EMC产品结构设计 | HDPE储罐_厂家-山东九州阿丽贝防腐设备 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 桌上式超净工作台-水平送风超净工作台-上海康路仪器设备有限公司 | 烟气换热器_GGH烟气换热器_空气预热器_高温气气换热器-青岛康景辉 | 吲哚菁绿衍生物-酶底物法大肠菌群检测试剂-北京和信同通科技发展有限公司 | 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 塑料异型材_PVC异型材_封边条生产厂家_PC灯罩_防撞扶手_医院扶手价格_东莞市怡美塑胶制品有限公司 | 聚合甘油__盐城市飞龙油脂有限公司 | 北京中航时代-耐电压击穿试验仪厂家-电压击穿试验机 | 光伏家 - 太阳能光伏发电_分布式光伏发电_太阳能光伏网 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 软装设计-提供软装装饰和软装配饰及软装陈设的软装设计公司 | 工业废水处理|污水处理厂|废水治理设备工程技术公司-苏州瑞美迪 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 仓储笼_仓储货架_南京货架_仓储货架厂家_南京货架价格低-南京一品仓储设备制造公司 | 软文发布-新闻发布推广平台-代写文章-网络广告营销-自助发稿公司媒介星 | 国际学校_国际学校哪个好_国际课程学校-国际学校择校网 | 河南正规膏药生产厂家-膏药贴牌-膏药代加工-修康药业集团官网 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 圆盘鞋底注塑机_连帮鞋底成型注塑机-温州天钢机械有限公司 | 范秘书_懂你的范文小秘书| Dataforth隔离信号调理模块-信号放大模块-加速度振动传感器-北京康泰电子有限公司 | 上海电子秤厂家,电子秤厂家价格,上海吊秤厂家,吊秤供应价格-上海佳宜电子科技有限公司 | 石牌坊价格石牌坊雕刻制作_石雕牌坊牌楼石栏杆厂家_山东嘉祥石雕有限公司 |