不熟悉的字符串编码(Base64?) - 尝试保存和使用 .3gp 文件的字符串内容

Posted

技术标签:

【中文标题】不熟悉的字符串编码(Base64?) - 尝试保存和使用 .3gp 文件的字符串内容【英文标题】:Unfamiliar encoding of string (Base64?) - Trying to save and use string contents of .3gp file 【发布时间】:2018-06-11 18:45:56 【问题描述】:

我正在尝试将 .3gp 文件的内容作为字符串读取,以便稍后将该字符串再次保存为有效的 .3gp 文件。

当我读取字符串内容时,它的编码似乎与我在 Windows 上查看 .3gp 文件的字符串内容时不同。

这是我收到的字符串内容开头的摘录:

\u0000\u0000\u0000\u0018ftyp3gp4\u0000\u0000\u0000\u0000isom3gp4\u0000\u0000\t�moov\u0000\u0000\u0000lmvhd\u0000\u0000\u0000�K\u000o u0000\u0000\u0003... U0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ U0000 \ u0000 \ u0000 \ u0000 @ \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000�meta\u0000\u0000\u0000!hdlr\u0000\u0000\u00000\u00000 \ u0000mdta \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000dkeys \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0003 \u0000\u0000\u0000\u001bmdtacom.android.version\u0000\u0000\u0000 mdtacom.android.manufacturer\u0000\u00 00\u0000\u0019mdtacom.android.model\u0000\u0000\u0000`ilst\u0000\u0000\u0000\u001d\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0015\u0000\u0000\u0000 U0000 \ U000000 \ u0000 \ u00008.1.0 \ u0000 \ u0000 \ u0000 \ u001e \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0016data \ u0000 \ u0016data \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u000000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u00 \ u0000 \ u0000google \ U0000 \ u0000 \ u0000 \ u001d \ u0000 \ u0000 \ u0000 \ u000000 \ u0000 \ u0000 \ u0000 \ u0015data \ u0000 \ u0015data \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0000pixel \ u0000 \ u0000 \ b1trak \ u0000 \ u0000 \ u0000\tkhd\u0000\u0000\u0000\u0007...o...K...o...

在 Windows 上的记事本中打开时,有效的 .3gp 文件的内容类似于以下摘录:

ftyp3gp4 isomiso23gp4 free -kmdatzá!3³³Ó×ùžŸ8HLììøýÂBg‡‡çîé2ÒÂòçXÉ••–:ÅÌ œ¬¥Ú.däÅ$îñS%$&%w‰š|„ÐѤ&€‚ˆŠÝ#4TVé  £#7ÈÍ ºFˆGУ#7ÈÄ„¾Fh((ˆò2 ¡ *Šïšy¾AÉùñí*W…ÿŠ£MÛJ…È»4ò\ÇÃú£×©ÎC—‰ñôŸü™Iœž(²z™¦ÿå;õÕ®]ÁB>ªÇŠGma,H(â > tNÊvt~b$ _W¿¢4•¶Ñ9Ñ_â©¥„ñž—÷ ¡æñ¹ ͨéZç£JmdÁ÷•ƒ_sÊvîü¾òµÉÒ̃S±,yðÆ4¼?ü0MU†ÝKÞ £ÏÊÑ#£n1t”ØâX<Oã£ïBAx!—O²×ÈáÄ’àB/¾a¿LÔÐàÝÊ:f†fÆÎqÓ1043s™yq‘‹¤dËJËËc&VRZXë2‚r¢—h©¢£%%7IJŽŽ––¶J4„ƒé‰²SHIMMm’‰$úJjkd•O¥MMm’šRJjklœÒRSS[dãHG>˜–Ý$ÝÈ-ò¥jýš§;‡’ÎBýT+Un[uÎÁAøn(HÀCñöÈBOǪÆ'@–¨ºAÜØ|qí½"yOÕ]1¨ò¿cm €<IT%´¡$h I/@ô˜Õ4‘@èõI– BŠtóÊÇʽoAËPÊ’ž!/.QퟪóÍæjF@ÀzP>@B®—ùUôùbi%VýVüw»ÞÓÎ àñ^s$t~/ÕÕj•+ËTUk“¦ÏNÕ ËÇíE°2->ú¸\¬w?ù¸:“‰NÏt‰’XÇIP5f‰P^€9TT%LªTŽÆ°ÁXôKþÌÁÖLìé ùÆ>g'§Ž1ó65:9rŽ™¡™¹«œtÌL #&^\bé2ÂÂâçXÈ“O¦¨(¶IQ8úyõ%6¹J(P>¦¦×'... ê'ÕOµÉõê'ÕOªŸj”ê'ÔOªŸU>×)ÔO¨ŸU>ª®N5êª'sPNTSl“šrjš‹d›4ĵì‹:Kjïf–”žœâ•›ÈÕ,Ÿè^òÀÕU kËâ§Ù|lœ€Á°aÿ|0ÇõPþ7@ 987654323@TªP²tÅ|A‹çøª¢‡Â ü¹GUÉSÜTH¯|y'Æ'A€ ÷à'».Óp€ÀyßQ&,³#K™• û|ŒÐÑ›äfzv€~á!3£ƒÓ·ù›šœ–9GÌÐÌØÙÎ6f&†n'³TUWYk“šª²ÒÓT¥•Ï«Ÿ[>¸Õ)Eƒë×Zef²ººÕ) 5••ÕÖ©I¬¬®®µJÑdú¹õÕ¶¹Z+ŸV>¶¶×'Ecê§Ö–Zå,¨LúÁõ†ÉI©©

根据我所做的一些搜索,我相信我收到的字符串类型是 Base64,并且我注意到在 javascript 中使用 unescape(encodeURIComponent()) 处理字符串给我的结果与有效的 .3gp 有点相似内容,但不准确。

有谁知道我需要对字符串做些什么以使其看起来像 Windows 中的有效 .3gp 文件字符串内容?这甚至可能吗?

【问题讨论】:

它看起来不像 base64。它看起来像 utf16。你是怎么读到这个的? 您如何读取文件以及如何打印数据?你有一堆 \u0000 是空字节。 那是不是 Base64。我怀疑它是原始字节(同样,.3gp/movies 是二进制数据文件)——如果是这样,尝试将其作为任何类型的“字符串”打开是错误。 (记事本或其他文本编辑器通常会有自己特定的“错误”,具体取决于编码和无效数据的处理方式)。不要处理字符串/文本,而是使用字节序列(和二进制编辑器).. 我使用名为 Expo 的 React Native javascript 库从 Android 智能手机读取文件。我不确定我从哪里得到它是 Base64 的想法,但听起来绝对不是这样。它实际上只是一个音频文件,但 Android 保存音频的方式显然是 .3gp 或 .mp4。这就是为什么会有很多空字节的原因吗? 我认为由于 javascript 在客户端打开文件方面的限制,Expo.js api 似乎只能将文件内容作为字符串读取。那我是不是就不能利用expo提供的字符串内容了? 【参考方案1】:

由于您只需要能够下载它,因此将其作为字符串保存就可以了。如果您可以改用节点缓冲区,它会更健壮一些,但 javascript 字符串应该携带您的所有字节。

小心处理下载 api 以确保它不会变成其他东西。

【讨论】:

你说得对,字符串的类型是UTF-16

以上是关于不熟悉的字符串编码(Base64?) - 尝试保存和使用 .3gp 文件的字符串内容的主要内容,如果未能解决你的问题,请参考以下文章

base64上传图片保存到数据库

使用 base64 对大文件进行编码

如何使用 PHP 从 base64 编码的数据/字符串创建图像并将其保存到网站文件夹

将base 64编码字符串转换为图像

为啥要用base64编码来保存图片?

从原理上理解Base64编码