INI 设置 (.ini)
事实上的行业配置标准 标准Windows 初始化配置文件(INI)是由 Microsoft Windows 推广的经典人类可读配置文件格式,可将应用程序设置组织到带名称的 [sections] 中,并以 key=value 键值对表示。
将 INI 转换为 JSON
免费的浏览器端 INI 转 JSON 转换器。在您的设备上即时转换文件。
检查与元数据
操作系统和文件分析器通过检查开头的二进制字节序列来识别 INI 文件:
字节级文件头签名 (魔数)
操作系统和文件分析器通过检查开头的二进制字节序列来识别 INI 文件:
十六进制签名 (偏移量 0):
5B ... 5DASCII 表示形式: [...]
标准化: 事实上的行业配置标准
技术规格
| 容器架构 | 纯文本配置文件,由 [section] 标题和 key = value 键值对组成,并可包含注释(; 或 #) |
| 压缩方式 | 未压缩文本文件 |
| 字节序 | UTF-8 或 ANSI 文本流 |
| 色彩空间 | 不适用(配置文件) |
| 通道与结构 | 按节命名空间分类的键值配置属性 |
| 最大尺寸 | 16 位 Windows 中历史上限为 64 KB;现代实现中不设上限 |
| 透明度 | 不支持 |
| 流式传输与渐进式加载 | 支持按行顺序流式解析 |
技术对比矩阵:INI 对比同类产品
| 技术属性 | INI (当前) | JSON | YAML | TOML |
|---|---|---|---|---|
| 语法复杂度 | 最简单(节 + 键=值) | 严格使用括号和引号 | 对缩进敏感的空白字符 | 现代类型化表格 |
| 注释支持 | 原生支持(; 和 # 注释) | 规范中不支持注释 | 原生支持(# 注释) | 原生支持(# 注释) |
| 嵌套结构 | 仅支持一级节 | 无限嵌套的对象/数组 | 无限嵌套的树 | 结构化表格数组 |
| 数据类型 | 隐式字符串(应用程序解析类型) | 显式数字、布尔值、数组 | 显式类型和锚点 | 显式日期、数字、数组 |
常见损坏模式与十六进制恢复指南
应用程序忽略设置或无法启动。
根本原因: 缺少节标题括号(例如写成 '[Settings' 而不是 '[Settings]')或值中包含未转义的等号。
恢复方法: 使用 File2File.app 配置格式化工具验证并修正 INI 语法。
安全分析与解析器攻击向量
INI解析器在反序列化为对象时,必须防范节注入攻击和原型污染。
已知攻击向量
- INI注入:用户输入中的换行符插入会创建未经授权的配置节。
- JavaScript INI解析器中赋值给 '__proto__' 的原型污染。
- 通过深度递归展开节名称造成拒绝服务。
防御性最佳实践: 清理用户输入以禁止换行符,并防范原型污染。
历史渊源与里程碑
2000Python 标准库包含用于处理 INI 文件的 configparser。
1995Windows 95引入Windows注册表以取代单体系统INI文件(SYSTEM.INI、WIN.INI)。
1985微软Windows 1.0引入WIN.INI作为核心操作系统配置数据库。
核心优势与特点
- 语法简洁直观:非技术用户也能轻松阅读和修改设置。
- 几乎每种编程语言中都有原生解析API(Python configparser、PHP parse_ini_file、C#)。
- 节命名空间可避免不同应用功能的设置相互冲突。
技术局限与劣势
- 没有正式的国际标准:注释字符(;与#)和转义规则在不同的解析器之间有所不同。
- 扁平化层次结构:如果没有自定义分隔符,则不支持深层嵌套数组或复杂的结构化对象。
- 所有值都作为字符串读取,需要应用程序手动解析整数、布尔值和浮点数。
趣味技术冷知识
- 在Windows 3.1中,整个操作系统中的每一个设置都仅存储在两个文件中:WIN.INI和SYSTEM.INI。
- Git在其位于".git/config"的主仓库配置文件中使用INI格式。
- Linux上的桌面快捷方式文件(XDG桌面条目".desktop"文件)使用标准的INI语法进行结构化。
常见技术问题
INI 文件有什么用途?
INI 文件被桌面软件、游戏和开发者工具(如 Git 配置和 PHP.ini)用于以易读的格式存储用户偏好和配置设置。
如何编辑 INI 文件?
您可以使用任何基础文本编辑器(如 Notepad、TextEdit、VS Code)打开和编辑 INI 文件,也可以直接在浏览器中使用 File2File.app 在线编辑。
我可以将 INI 转换为 JSON 或 YAML 吗?
可以。File2File.app 可以在您的浏览器中即时将 INI 文件转换为整洁的 JSON、YAML 或 TOML 格式。