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>
                            主站蜘蛛池模板: 干粉砂浆设备-干粉砂浆生产线-干混-石膏-保温砂浆设备生产线-腻子粉设备厂家-国恒机械 | 小程序开发公司-小程序制作-微信小程序开发-小程序定制-咏熠软件 | 苏州注册公司_苏州代理记账_苏州工商注册_苏州代办公司-恒佳财税 | 防火卷帘门价格-聊城一维工贸特级防火卷帘门厂家▲ | 陕西安玻璃自动感应门-自动重叠门-磁悬浮平开门厂家【捷申达门业】 | 消防泵-XBD单级卧式/立式消防泵-上海塑泉泵阀(集团)有限公司 | 诸城网站建设-网络推广-网站优化-阿里巴巴托管-诸城恒泰互联 | 【德信自动化】点胶机_全自动点胶机_自动点胶机厂家_塑料热压机_自动螺丝机-深圳市德信自动化设备有限公司 | 活性炭-果壳木质煤质柱状粉状蜂窝活性炭厂家价格多少钱 | AGV叉车|无人叉车|AGV智能叉车|AGV搬运车-江西丹巴赫机器人股份有限公司 | 低压载波电能表-单相导轨式电能表-华邦电力科技股份有限公司-智能物联网综合管理平台 | HEYL硬度计量泵-荧光法在线溶解氧仪-净时测控技术(上海)有限公司 | Trimos测长机_测高仪_TESA_mahr,WYLER水平仪,PWB对刀仪-德瑞华测量技术(苏州)有限公司 | 步入式高低温测试箱|海向仪器 | 执业药师报名时间,报考条件,考试时间-首页入口 | 检验科改造施工_DSA手术室净化_导管室装修_成都特殊科室建设厂家_医疗净化工程公司_四川华锐 | 重庆监控_电子围栏设备安装公司_门禁停车场管理系统-劲浪科技公司 | 电伴热系统施工_仪表电伴热保温箱厂家_沃安电伴热管缆工业技术(济南)有限公司 | 东莞喷砂机-喷砂机-喷砂机配件-喷砂器材-喷砂加工-东莞市协帆喷砂机械设备有限公司 | 重庆小面培训_重庆小面技术培训学习班哪家好【终身免费复学】 | 超声波反应釜【百科】-以马内利仪器 | 成都治疗尖锐湿疣比较好的医院-成都治疗尖锐湿疣那家医院好-成都西南皮肤病医院 | 通辽信息港 - 免费发布房产、招聘、求职、二手、商铺等信息 www.tlxxg.net | 百度关键词优化_网站优化_SEO价格 - 云无限好排名 | Brotu | 关注AI,Web3.0,VR/AR,GPT,元宇宙区块链数字产业 | 常州翔天实验仪器厂-恒温振荡器-台式恒温振荡器-微量血液离心机 恒温恒湿箱(药品/保健品/食品/半导体/细菌)-兰贝石(北京)科技有限公司 | 礼至家居-全屋定制家具_一站式全屋整装_免费量房设计报价 | 济南菜鸟驿站广告|青岛快递车车体|社区媒体-抖音|墙体广告-山东揽胜广告传媒有限公司 | 下水道疏通_管道疏通_马桶疏通_附近疏通电话- 立刻通 | 打包箱房_集成房屋-山东佳一集成房屋有限公司 | 木材烘干机,木炭烘干机,纸管/佛香烘干设备-河南蓝天机械制造有限公司 | 汽液过滤网厂家_安平县银锐丝网有限公司| 真空泵厂家_真空泵机组_水环泵_旋片泵_罗茨泵_耐腐蚀防爆_中德制泵 | 空调风机,低噪声离心式通风机,不锈钢防爆风机,前倾皮带传动风机,后倾空调风机-山东捷风风机有限公司 | 紫外荧光硫分析仪-硫含量分析仪-红外光度测定仪-泰州美旭仪器 | 上海办公室装修公司_办公室设计_直营办公装修-羚志悦装 | 七维官网-水性工业漆_轨道交通涂料_钢结构漆 | 华东师范大学在职研究生招生网_在职研究生招生联展网 | 安徽合肥项目申报咨询公司_安徽合肥高新企业项目申报_安徽省科技项目申报代理 | 高压负荷开关-苏州雷尔沃电器有限公司 | 工业胀紧套_万向节联轴器_链条-规格齐全-型号选购-非标订做-厂家批发价格-上海乙谛精密机械有限公司 |