中文

什么是 DOCX 文件及其与 DOC 的区别?

最后更新: 2025年4月9日 DOCX 文件 是 Microsoft Word 使用的一种文档格式,是 Office Open XML (OOXML) 规范的一部分。DOC 是 Office 2007 之前使用的旧的二进制文件格式。与之相比,DOCX 更小、更安全,并支持高级功能。 请查看我们的详细指南:DOC 和 DOCX 的区别 什么是 DOCX 文件? DOCX 文件 是 Microsoft Word 用于存储文本、图像、表格和其他格式元素的文档文件格式。它于 Microsoft Office 2007 推出,是 Word 文档的默认文件格式,并且是 Office Open XML (OOXML) 标准的一部分。DOCX 文件在各个平台上得到广泛支持,使其成为创建和共享文档的可靠选择。 与基于二进制的旧 DOC 格式相比,DOCX 文件是基于 XML 结构构建的。此更改允许更好的压缩、改进的兼容性和在文件损坏时更容易恢复文件。 DOCX 文件的突出之处 轻量和压缩: DOCX 文件使用 ZIP 压缩,因此与 DOC 文件相比,尺寸更小,节省存储空间并加速文件传输。 丰富的格式选项: DOCX 支持高级格式功能,如样式、主题、表格、图像、图表和嵌入对象,使用户能够创建专业外观的文档。 跨平台兼容性: DOCX 文件可以在包括 Google Docs、LibreOffice 和 Apple Pages 等各种应用程序中打开和编辑,确保在多种设备和操作系统上的可访问性。
三月 26, 2025 · 1 分钟 · Shakeel Faiz

什么是 XML:全面指南

最后更新: 2025年3月25日 什么是 XML? XML(可扩展标记语言) 是一种用于存储、传输和重建数据的标记语言和文件格式。它提供了一种结构化的方法来编码信息,使其既可被人类读取,也可被机器读取。 XML 的主要特性 1. 由开放标准定义 由 万维网联盟(W3C) 于1998年根据 XML 1.0规范 建立。 遵循严格的规则以保证数据结构化且易于解释。 2. 设计目标 XML 的设计着重于在不同平台上的简洁性、普遍性和可用性。 采用基于文本的格式,便于阅读和编辑。 3. 支持 Unicode XML 支持 Unicode,允许存储和处理多语言文本。 4. 适用性 最初为文档创建,现在 XML 被广泛用于各个领域的数据表示,包括网络服务、API 和配置文件。 5. 模式和 API XML 结构可以使用文档类型定义(DTD)、 XML 架构(XSD) 或 Relax NG 来定义。 各种 API,如 DOM(文档对象模型) 和 SAX(简单 API for XML),支持 XML 处理。 6. XML 的常见用途 不同系统之间的数据交换(如网络服务、API)。 软件应用中的配置文件。 存储结构化信息(如 RSS 提要、SVG 图形、文档格式如 DOCX)。 网络开发(如 XHTML、SOAP、基于 AJAX 的应用)。 XML 概述 1.
三月 25, 2025 · 3 分钟 · Shakeel Faiz

适用于 Python、Java 和 JavaScript 的最佳 XML 解析器(附示例)

最后更新: 2025 年 3 月 25 日 XML(可扩展标记语言) 广泛用于数据存储、配置文件和 web 服务。高效解析 XML 对于处理结构化数据的开发者来说至关重要。本文将探索适用于 Python、Java 和 JavaScript 的最佳 XML 解析器,并为每种语言提供示例。 1. 在 Python 中解析 XML Python 提供了多种库来解析 XML 文件,每种都有其适用的用例。 1.1 xml.etree.ElementTree(内置库) xml.etree.ElementTree 是一个简单且高效的内置模块,用于解析 XML。 示例:解析 XML 文件 优点: 轻量且易于使用。 缺点: 在处理复杂 XML 结构时功能有限。 1.2 lxml(快速且功能丰富) lxml 是一个强大的库,基于 libxml2 C 库,提供速度和 XPath 支持。 示例:使用 lxml 解析 优点: 比 ElementTree 更快,支持 XPath。 缺点: 需要安装(pip install lxml)。 1.3 BeautifulSoup(最适合网页抓取) BeautifulSoup 主要用于 解析 HTML,但也支持 XML。
三月 21, 2025 · 2 分钟 · Shakeel Faiz

如何用 Python、Java 和 JavaScript 读取和编辑 XML 文件

最后更新:2025年3月25日 XML (可扩展标记语言) 被广泛用于存储和传输数据。无论您是初学者还是经验丰富的开发者,了解如何读取和编辑 XML 文件都是必不可少的。在本指南中,我们将介绍高效处理 XML 文件的基本和高级方法。 理解 XML 结构 一个 XML 文件由元素、属性和层次结构数据组成。以下是一个简单的 XML 示例: 读取 XML 文件 1. 使用 Python Python 的 xml.etree.ElementTree 模块允许简便地解析 XML。 xml.etree.ElementTree 是 Python 的内置模块,这意味着您无需单独安装它。它与 Python 一同预装,提供用于解析、修改和创建 XML 数据的便捷工具。 代码解析 这个 Python 脚本使用 xml.etree.ElementTree 来解析一个 XML 文件(books.xml)。它检索所有 元素,提取它们的、<author> 和 <price> 值,并打印出来。这使得结构化的 XML 数据读取变得更容易。 2. 使用 Java Java 提供 javax.xml.parsers 用于处理 XML。 javax.xml.parsers 是一个 Java 内置包,提供用于使用 DOM(文档对象模型)和 SAX(简单 API for XML)解析器解析 XML 的类。它被包含在 Java 标准库中,所以无需额外安装即可使用。 </section> <footer class="entry-footer"><span title='2025-03-20 00:00:00 +0000 UTC'>三月 20, 2025</span> · 1 分钟 · Shakeel Faiz</footer> <a class="entry-link" aria-label="post link to 如何用 Python、Java 和 JavaScript 读取和编辑 XML 文件" href="https://blog.fileformat.com/zh/programming/how-to-read-and-edit-xml-files-in-python-java-and-javascript/"></a> </article> <article class="post-entry"> <header class="entry-header"> <h2>阅读和编辑XML文件的新手指南 </h2> </header> <section class="entry-content-home"> 最后更新: 2025年3月25日 为什么学习XML编辑? XML (可扩展标记语言) 广泛用于软件应用程序、Web服务和配置文件中的数据存储和传输。然而,许多人在正确打开或修改XML文件时遇到困难。本指南将帮助初学者和开发人员学习如何高效地读取、编辑、验证和格式化XML文件。 打开XML文件的工具 1. 记事本 (Windows内置编辑器) 右键单击XML文件,选择 打开方式 > 记事本。 适用于快速编辑,但缺乏语法高亮功能。 2. Visual Studio Code (VS Code) 免费、轻量且功能丰富的代码编辑器。 提供语法高亮、自动格式化和XML验证扩展功能。 3. Microsoft Excel 能以结构化表格形式打开XML。 导航到 文件 > 打开 > 浏览,选择XML文件,然后选择 作为XML表格。 4. 在线XML编辑器 网站如 CodeBeautify、XMLGrid 和 XMLViewer 允许查看和编辑XML而无需安装软件。 适用于快速检查和格式化。 编辑XML:语法规则和最佳实践 遵循正确的标签结构 每个开始标签都必须有对应的结束标签。 <person> <name>John Doe</name> </person> 使用有意义的标签名 除非必要,避免使用诸如<item>或<data>这样的一般性标签。 确保嵌套正确 不正确的示例: <parent> <child1> <child2></child2> </child1> </parent> 正确的示例: <parent> <child1> <child2></child2> </child1> </parent> 转义特殊字符 使用<代表<,>代表>,&代表&。 使用XSD(XML模式定义)验证XML XML验证通过使用XSD文件定义规则来确保数据的完整性。 验证XML的步骤: 创建一个XSD文件(定义XML结构) </section> <footer class="entry-footer"><span title='2025-03-19 00:00:00 +0000 UTC'>三月 19, 2025</span> · 1 分钟 · Shakeel Faiz</footer> <a class="entry-link" aria-label="post link to 阅读和编辑XML文件的新手指南" href="https://blog.fileformat.com/zh/web/a-beginner-guide-to-reading-and-editing-xml-files/"></a> </article> <article class="post-entry"> <header class="entry-header"> <h2>Minecraft 与 MCPACK 文件 </h2> </header> <section class="entry-content-home"> 最后更新: 2025年2月27日 什么是 Minecraft? Minecraft 是一款全球公认的沙盒游戏,提供无与伦比的创作自由,让玩家可以在程序生成的世界中探索、建造和生存。自2009年测试版发布和2011年正式发布以来,Minecraft 已成为有史以来最畅销的视频游戏,销量超过3亿份。其开放式的游戏玩法、模组功能和社区驱动的内容都促进了其持久的成功。其中一个使 Minecraft 实现自定义的关键组件是 MCPACK 文件格式,它允许玩家修改游戏内的纹理、声音和行为。 Minecraft 的开放性 Minecraft 的独特之处在于其并没有强制性的目标,允许玩家自己定义游戏目标。虽然游戏包含一个可选的成就系统,但核心体验围绕在通过方块建造采集资源、制作物品和建造复杂建筑上。玩家与一个由不同生物群系组成的扩展、程序化生成的世界互动,包括森林、沙漠、丛林和山地。 游戏最值得注意的特性之一是 红石,这是一种材料,允许玩家创建复杂的电路、自动化机械和逻辑门。这些使得游戏内出现了计算机、计算器和简单的人工智能形式,展示了 Minecraft 的深度和灵活性。 游戏模式 Minecraft 提供不同的游戏模式以满足各种玩法风格。 生存模式 在生存模式中,玩家必须收集自然资源如木材和石头以制作工具、建造避难所,并从黑暗区域生成的敌对生物中保护自己。该模式设有一个健康条和一个饥饿条,要求玩家管理食物供应以维持健康。 玩家可以通过采矿、冶炼、繁殖动物和战斗等活动获得经验值。这些经验值可以用来附魔工具、武器和盔甲,提高它们的耐久性和效能。 当玩家死亡时,他们会掉落物品,这些物品可以在5分钟内被取回,否则会消失。重生点默认为世界生成点,但可以通过床或重生锚进行调整。 生存模式有两种变体: 硬核模式:类似于生存,但具有永久死亡——玩家死亡后无法重生,必须删除世界或以旁观者身份进行游戏。 冒险模式:专为自定义地图设计,此模式限制玩家直接修改世界,要求他们遵循地图制作者设定的预定义规则。 创造模式 在创造模式中,玩家可以无限制地获取所有物品,并即时放置或移除方块。玩家可以自由飞行,不受伤害或饥饿威胁,使此模式特别适合于大型项目的建造、测试机制和红石装置的实验。 MCPACK 文件在生存和创造模式中都扮演着关键角色,因为它们允许玩家修改纹理、声音和游戏机制,以创造符合他们偏好风格的自定义体验。 玩家自定义:皮肤和 MCPACK 文件 新的 Minecraft 玩家会随机分配一个默认皮肤,共有九种选项,包括标志性的 Steve 和 Alex 模型。然而,Minecraft 最受欢迎的特性之一就是自定义皮肤的能力。玩家可以创造并上传自己的角色设计,替换默认纹理为个性化的版本。 这些自定义皮肤通常以 PNG 格式 存储,但当其打包成资源包时,它们格式化为 MCPACK 文件。MCPACK 格式是一种压缩包,包含自定义资源如: 角色皮肤(玩家和生物的自定义外观) 纹理(对方块、物品和用户界面元素的修改) 声音(自定义背景音乐、音效或语音包) Minecraft 中的生物:被动、中立和敌对实体 生物(简称移动实体)为 Minecraft 的世界带来了生机,种类不同的生物对游戏玩法产生不同的影响。这些生物包括: 被动生物(友好且对资源有用):牛、猪、鸡和羊提供食物、羊毛和皮革。 敌对生物(攻击玩家):僵尸、骷髅、蜘蛛、女巫和臭名昭著的苦力怕,其接近玩家时会自爆。 中立生物(未被激怒时非敌对):末影人、狼和猪灵。末影人具有可以瞬移和搬运方块的独特性,让其成为游戏中最有趣的生物之一。 某些敌对生物如僵尸和骷髅在阳光下会燃烧,除非受到头盔保护或站在水中。还有一些特殊的生物变体,如尸壳(免疫阳光的沙漠僵尸)和溺尸(生活在海洋和河流中的僵尸)。 使用 MCPACK 文件修改生物和纹理 MCPACK 文件是 Minecraft 自定义系统的重要组成部分。玩家和开发者使用它们创建自定义资源包以修改游戏内的视觉、声音甚至行为。通过 MCPACK 文件,玩家可以: </section> <footer class="entry-footer"><span title='2025-02-27 00:00:00 +0000 UTC'>二月 27, 2025</span> · 1 分钟 · Shakeel Faiz</footer> <a class="entry-link" aria-label="post link to Minecraft 与 MCPACK 文件" href="https://blog.fileformat.com/zh/game/minecraft-and-mcpack-files/"></a> </article> <article class="post-entry"> <header class="entry-header"> <h2>PostScript: 清晰解释 </h2> </header> <section class="entry-content-home"> 最后更新:2025年2月20日 什么是PostScript? PostScript (PS) 是一种页面描述语言 (PDL),由Adobe Systems于1982年开发。主要用于桌面出版、打印和图形设计,用于描述文本和图像如何在页面上呈现。 对PostScript (PS)的解释 PostScript (PS) 既是一种页面描述语言 (PDL),也是一种编程语言,其是动态类型和基于堆栈的。这意味着: 1. 页面描述语言 (PDL) 是什么? 页面描述语言定义了图形和文本在打印页面或屏幕上的显示方式。PostScript用于打印机、出版软件和数字排版,以精确呈现字体、图像和布局。 2. 什么是基于堆栈的编程语言? PostScript 使用堆栈来处理命令,遵循**后入先出 (LIFO)**的方法。例如,在PostScript中添加两个数字,你需将它们压入堆栈,然后调用一个运算符来处理它们: 10 20 add 这会将 10 和 20 压入堆栈,然后 add 命令将它们弹出并将结果 (30) 再次压入堆栈。 3. 动态类型 PostScript不需要显式的类型定义。变量可以保存不同类型(数字、字符串、数组等),无需预定义类型。 4. PostScript的用途 PostScript主要用于桌面出版和电子出版,即帮助创造和打印高质量的文档,精确控制字体、布局和图形。 5. 图灵完备的语言 Being 图灵完备意味着PostScript理论上可以完成任何计算,只要有足够的内存和时间。这意味着它不仅用于打印,还可以用于一般的编程任务。 6. 历史和发展 Adobe Systems于1982至1984年间开发。 由John Warnock、Charles Geschke、Doug Brotz、Ed Taft和Bill Paxton创建。 最新版本,PostScript 3,于1997年发布,增加了更好的性能、色彩管理和图像压缩。 PostScript历史 PostScript的起源可以追溯到1976年,当时John Gaffney在Evans & Sutherland工作时开发了页面描述语言的概念,同时Xerox PARC正在开发激光打印机并需要一种标准来定义页面图像。他们首先创建了Press格式,随后在1978年演变为由John Gaffney 和 Martin Newell开发的Interpress。 在1982年,John Warnock 和 Chuck Geschke 离开了Xerox PARC,并共同创立了Adobe Systems,与Doug Brotz、Ed Taft 和 Bill Paxton一起开发了PostScript,作为一个简单的Interpress替代品。它于1984年商业发布。 </section> <footer class="entry-footer"><span title='2025-02-12 00:00:00 +0000 UTC'>二月 12, 2025</span> · 2 分钟 · Shakeel Faiz</footer> <a class="entry-link" aria-label="post link to PostScript: 清晰解释" href="https://blog.fileformat.com/zh/page-description-language/postscript/"></a> </article> <article class="post-entry"> <header class="entry-header"> <h2>GEDCOM 文件格式与FamilySearch </h2> </header> <section class="entry-content-home"> 最后更新: 2025年2月7日 什么是GEDCOM? GEDCOM (Genealogical Data Communication)是为存储、交换和共享家谱数据(家族树信息)而设计的一种开放文件格式。它被广泛用于家谱软件和网站,可以更轻松地在不同平台之间传输家族树数据。 谁开发了GEDCOM? GEDCOM是由耶稣基督后期圣徒教会(LDS Church)创建的,该教会运营着一个主要的家谱研究组织FamilySearch。他们的目标是简化家谱数据管理并允许更好的研究合作。 GEDCOM如何工作? GEDCOM文件是纯文本文件(自7.0版本起使用UTF-8编码)。 它们包含关于个体的信息,如: 姓名 出生和死亡日期 家庭关系(父母、子女、配偶) 事件(婚姻、移民等) 这些记录使用元数据进行链接,确保家庭成员之间的正确连接。 GEDCOM版本与行业标准 最新的官方版本是GEDCOM 7.0,于2021年发布。 然而,GEDCOM 5.5.1(来自1999年,2019年定稿后)仍然是最广泛使用的标准。 由于GEDCOM 5.5.1存在局限性,一些家谱软件开发人员创造了自定义扩展如**GEDCOM 5.5 EL(扩展位置)**以改善它。 GEDCOM 7.0的采用 FamilySearch计划在2022年第三季度支持GEDCOM 7.0。 Ancestry.com也显示了采用它的兴趣,但尚未提供具体的实施日期。 为什么GEDCOM很重要? 跨平台兼容性 – 允许用户在不同的家谱网站和软件之间移动他们的家族树数据。 长期数据存储 – 确保家谱数据以标准化格式保持可访问。 家谱合作 – 使研究人员和家族历史学家能够高效地分享和合并数据。 GEDCOM数据模型的解释 GEDCOM使用一种谱系链接数据模型来以结构化方式组织家庭关系。它基于核心家庭概念,这意味着它记录关系是以父母和子女的形式,而不仅限于个体。 GEDCOM数据模型的关键组件 INDI(个体)记录 谱系文件中的每个人作为一个INDI(个体)记录存储。 每个个体都分配有一个唯一的ID号,以确保文件中的正确链接。 FAM(家庭)记录 家庭记录(FAM)作为个体之间的链接结构。 一个FAM记录分配: HUSB(丈夫)– 家庭中的父亲。 WIFE(妻子)– 家庭中的母亲。 CHIL(子女)– 夫妇的子女。 这些标签是历史性的,基于最初的GEDCOM模型,但至今仍在使用。 GEDCOM中性别表示的演变 起初,GEDCOM模型设计是基于异性恋家庭结构,其中男性(HUSB)和女性(WIFE)有子女(CHIL)。 GEDCOM 7.0规范说明这些术语不暗示性别角色或生物亲子关系。 更新的规范允许: 同性伴侣 收养、寄养和共同生活 更灵活的家庭结构 当提到FAM记录中的个人时,现在更倾向于使用术语**“伴侣”、“父母”或“配偶”**。 这为何重要? 保持结构化关系 – 确保每个人都正确连接到父母、配偶和子女。 提高兼容性 – 允许家谱软件有效识别和组织家庭数据。 增加包容性 – 支持多样化的家庭结构,而不假定传统性别角色。 GEDCOM文件结构的解释 一个GEDCOM文件由三个主要部分组成:头部、记录和结尾。每个部分在组织家族数据中扮演特定的角色,文件的结构高度组织化,以确保个人和家庭之间的关系清晰且标准化。 </section> <footer class="entry-footer"><span title='2025-02-07 00:00:00 +0000 UTC'>二月 7, 2025</span> · 2 分钟 · Shakeel Faiz</footer> <a class="entry-link" aria-label="post link to GEDCOM 文件格式与FamilySearch" href="https://blog.fileformat.com/zh/data/gedcom-file-format/"></a> </article> <article class="post-entry"> <header class="entry-header"> <h2>在 Python 中处理 PDF 文件 </h2> </header> <section class="entry-content-home"> 最后更新: 2025年1月29日 本文将指导您如何在 Python 中处理 PDF 文件。为此,我们将利用 pypdf 库。 使用 pypdf 库,我们将演示如何在 Python 中执行以下操作: 从 PDF 中提取文本 旋转 PDF 页面 合并多个 PDF 拆分 PDF 为单独文件 为 PDF 页添加水印 注意: 本文涵盖了许多有价值的细节,您可以随时跳到您最感兴趣的部分!内容按易于导航的方式组织,您可以快速专注于对您而言最重要的部分。 示例代码 您可以从以下链接下载本文使用的所有示例代码,包括代码、输入文件和输出文件。 在 Python 中处理 PDF 文件的代码示例及输入文件 安装 pypdf 要安装 pypdf,只需在终端或命令提示符中运行以下命令: pip install pypdf 注意: 上述命令区分大小写。 1. 使用 Python 从 PDF 文件提取文本 代码解释 1. 创建 PDF 阅读器对象 reader = PdfReader(pdf_file) PdfReader(pdf_file) 将 PDF 文件加载到阅读器对象中。 该对象允许访问页面及其内容。 2. 遍历页面 for page_number, page in enumerate(reader. </section> <footer class="entry-footer"><span title='2025-01-29 00:00:00 +0000 UTC'>一月 29, 2025</span> · 3 分钟 · Shakeel Faiz</footer> <a class="entry-link" aria-label="post link to 在 Python 中处理 PDF 文件" href="https://blog.fileformat.com/zh/programming/working-with-pdf-files-in-python/"></a> </article> <article class="post-entry"> <header class="entry-header"> <h2>创建或编辑#EXTM3U文件时的常见错误及修复方法 </h2> </header> <section class="entry-content-home"> 最后更新: 2025年1月16日 我们在之前的文章中已经讨论了#EXTM3U文件的关键要素和相关的重要主题。请查看以下链接。 #EXTM3U简介 如何手动使用#EXTM3U创建M3U播放列表文件 在本文中,我们将讨论用户在创建或编辑#EXTM3U文件时容易犯的常见错误。 #EXTM3U播放列表的关键语法元素 #EXTM3U: 这是播放列表文件的第一行,表示该文件是扩展的M3U播放列表。 #EXTINF:<duration>,<title>: 该行提供媒体文件的持续时间(以秒为单位)和曲目的标题。 <duration>: 媒体文件的持续时间,以秒为单位。 <title>: 曲目的名称或标题。如果未提供标题,可以省略,将使用文件名代替。 <file_path>: 该行包含实际媒体文件的文件路径。根据文件的位置,它可以是相对路径或绝对路径。 #EXTM3U文件的结构: #EXTM3U文件的结构相对简单,由一个头部和多个条目组成,每个条目代表一个媒体文件。以下是结构的分解: 头部行: 文件以#EXTM3U开始,以标识它是一个扩展的M3U播放列表。 曲目条目: 每个曲目条目由两行组成: 第一行以#EXTINF:开始,并提供持续时间和标题。 第二行提供实际媒体文件的文件路径或URL。 完整#EXTM3U文件示例: #EXTM3U #EXTINF:215,Song A C:\Music\songA.mp3 #EXTINF:300,Song B C:\Music\songB.mp3 #EXTINF:180,Song C http://example.com/songC.mp3 播放列表以#EXTM3U开始。 第一首曲目“Song A”的持续时间为215秒,文件位于C:\Music\songA.mp3。 第二首曲目“Song B”的持续时间为300秒,文件位于C:\Music\songB.mp3。 第三首曲目“Song C”的持续时间为180秒,其URL为http://example.com/songC.mp3。 创建或编辑#EXTM3U文件时的常见错误和修复方法 创建和编辑#EXTM3U播放列表可能会出现一些错误。让我们来看看一些常见问题以及如何修复它们。 1. 缺失#EXTM3U头部 错误: 如果缺少#EXTM3U头部,播放列表可能无法被识别为有效的扩展M3U文件。 修复: 请始终确保播放列表的第一行为#EXTM3U。 2. #EXTINF中的持续时间格式错误 错误: #EXTINF行中指定的持续时间必须为正整数。常见的错误是输入非数字值或将持续时间留空。 修复: 确保持续时间是有效的整数,并用秒指定。例如,#EXTINF:240,Song Title。 3. 文件路径或URL错误 错误: 如果文件路径或URL不正确,媒体文件将无法找到或播放。 修复: 仔细检查文件路径或URL,确保它们是正确的和可访问的。对于本地文件使用绝对路径,并确保如果通过互联网流式传输,URL是有效的。 4. 省略曲目标题 错误: 在#EXTINF行中省略曲目标题可能会导致混淆,因为标题在播放列表中用于标识。 修复: 始终在#EXTINF行中包括标题。如果您希望将其留空,请务必提供持续时间(以秒为单位)。 5. </section> <footer class="entry-footer"><span title='2025-01-16 00:00:00 +0000 UTC'>一月 16, 2025</span> · 1 分钟 · Shakeel Faiz</footer> <a class="entry-link" aria-label="post link to 创建或编辑#EXTM3U文件时的常见错误及修复方法" href="https://blog.fileformat.com/zh/audio/common-errors-when-creating-or-editing-extm3u-files-and-how-to-fix-them/"></a> </article> <footer class="page-footer"> <nav class="pagination"> <a class="next" href="https://blog.fileformat.com/zh/page/2/">下一页 »</a> </nav> </footer> </main> <footer class="footer"> </footer> <a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor"> <path d="M12 6H0l6-6z" /> </svg> </a> <script> (function(i, s, o, g, r, a, m) {i['ContainerizeMenuObject'] = r; i[r] = i[r] || function() {(i[r].q = i[r].q || []).push(arguments)}, i[r].l = 1 * new Date(); a = s.createElement(o),m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.append(a)})(window, document, 'script', 'https://menu.containerize.com/scripts/engine.min.js?v=1.0.1', 'fileformat-zh'); </script> <script> let menu = document.getElementById('menu') if (menu) { menu.scrollLeft = localStorage.getItem("menu-scroll-position"); menu.onscroll = function () { localStorage.setItem("menu-scroll-position", menu.scrollLeft); } } document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener("click", function (e) { e.preventDefault(); var id = this.getAttribute("href").substr(1); if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) { document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({ behavior: "smooth" }); } else { document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView(); } if (id === "top") { history.replaceState(null, null, " "); } else { history.pushState(null, null, `#${id}`); } }); }); </script> <script> var mybutton = document.getElementById("top-link"); window.onscroll = function () { if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) { mybutton.style.visibility = "visible"; mybutton.style.opacity = "1"; } else { mybutton.style.visibility = "hidden"; mybutton.style.opacity = "0"; } }; </script> <script> document.getElementById("theme-toggle").addEventListener("click", () => { if (document.body.className.includes("dark")) { document.body.classList.remove('dark'); localStorage.setItem("pref-theme", 'light'); } else { document.body.classList.add('dark'); localStorage.setItem("pref-theme", 'dark'); } }) </script> </body> </html>