V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
leewendao
V2EX  ›  问与答

小白想问个问题,那些可以转变文件类型的软件是怎么实现的?

  •  
  •   leewendao · 2020-10-02 23:12:08 +08:00 · 1432 次点击
    这是一个创建于 1542 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在找资料弄到 Kindle 上,因为 Kindel 不支持 equp 格式,所以要把 equp 转为 mobi 的。

    在这个过程中我注意到有一些转变文件类型格式的软件,例如说 convertio 。这时我突然发现这一块是我的知识盲区,我不太明白这个转变过程是如何实现的。用 bing 等查了一圈还是不得其解,所以就来论坛发帖求问了。

    大概明白这是通过改变文件的编码实现的,但是这个过程是怎么实现的?如何保证这一过程中信息不会遗失?

    问题比较小白咳咳,但是真的不懂,求问。

    7 条回复    2020-10-03 18:12:28 +08:00
    wzzzx
        1
    wzzzx  
       2020-10-02 23:20:31 +08:00   ❤️ 1
    每种文件都有自己的存储格式,如果你知道 A 文件和 B 文件的存储格式,相互转换不就是分分钟的事了么。如果是纯小白的话,可以简单理解为华氏度和摄氏度的相互转换,实际上并没有那么一个固定的公式罢了~
    chihiro2014
        2
    chihiro2014  
       2020-10-02 23:28:19 +08:00
    以某种转换方式,从 A 类变成 B 类,符合类型即可
    imdong
        3
    imdong  
       2020-10-02 23:59:14 +08:00
    我也不懂,但是我能猜到原理大概应该是这样,就以富文本内容举例吧。

    富文本比较常见的是 word 相关的格式 如 doc docx,另一个就是 html 吧。

    以 html 举例,我们用到了大量的标记来记录一段内容的样式,对于字体大小,颜色,间距等。

    那么 doc 之类的其他也是有类似的格式来记录的,只是可能不用 xml 结构,

    而如果你需要做一个格式转换的话,你需要同时能解析两边的记录结构格式啥的。

    A 格式 解析为 自己的结构,然后再重新按照 B 的格式 生成文件。

    比如,凭空假设。

    html:<p style="font-size: 14px;">你好,我是<b>张三</b>。</p>
    adoc:%paragraph:$font-size=14px$你好%,我是%bold:张三%。%

    你的程序理解这个结构后,只要知道这段是 14px 的字,张三是加粗的就好了。

    当然,实际情况应该比这个更复杂,比如图片应该是以 三原色的数值排序来做,而格式差异在压缩处理上。

    比如相同的颜色,出现的比较多的,应该会有 map,每个格式的 map 逻辑不同。

    而视频内容的压缩,又会涉及到帧与帧之间的处理逻辑了。

    但是整体思路应该是一样的。

    以上是我的猜想,如有不对,欢迎楼下大佬指正。
    DoctorCat
        4
    DoctorCat  
       2020-10-03 01:11:11 +08:00
    1.特定格式的文件是按照一定规则结构组织一起的,虽然很多文件肉眼都不可读
    2.需要知道该文件构成的规则或定义
    3.通过代码实现转换功能

    这就好比打铁工匠,把烧红的铁棍棍打成了刀子。你问刀子怎么来的?当然是利用一定的工艺,把铁块转重组为刀子了
    KennyMcCormick
        5
    KennyMcCormick  
       2020-10-03 10:29:06 +08:00 via iPhone
    这个错别字。
    我瞎了……
    leewendao
        6
    leewendao  
    OP
       2020-10-03 18:11:53 +08:00
    @imdong 谢谢谢谢,万分感谢
    leewendao
        7
    leewendao  
    OP
       2020-10-03 18:12:28 +08:00
    @DoctorCat 谢谢,有点明白了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3481 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 11:10 · PVG 19:10 · LAX 03:10 · JFK 06:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.