找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 373|回复: 7

[工具]CsfStudio

[复制链接]
发表于 2026-2-15 19:01:14 | 显示全部楼层 |阅读模式
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>CsfStudio - Red Alert 2 String Table Editor</title>
  7.     <style>
  8.         body {
  9.             font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif;
  10.             line-height: 1.6;
  11.             color: #24292e;
  12.             max-width: 800px;
  13.             margin: 0 auto;
  14.             padding: 20px;
  15.             background-color: #ffffff;
  16.         }
  17.         h1, h2, h3 {
  18.             border-bottom: 1px solid #eaecef;
  19.             padding-bottom: 0.3em;
  20.             margin-top: 24px;
  21.             margin-bottom: 16px;
  22.             font-weight: 600;
  23.         }
  24.         code {
  25.             padding: 0.2em 0.4em;
  26.             margin: 0;
  27.             font-size: 85%;
  28.             background-color: rgba(27,31,35,0.05);
  29.             border-radius: 3px;
  30.             font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
  31.         }
  32.         pre {
  33.             padding: 16px;
  34.             overflow: auto;
  35.             font-size: 85%;
  36.             line-height: 1.45;
  37.             background-color: #f6f8fa;
  38.             border-radius: 6px;
  39.             white-space: pre-wrap;
  40.         }
  41.         pre code {
  42.             background-color: transparent;
  43.             padding: 0;
  44.             font-size: 100%;
  45.         }
  46.         table {
  47.             border-spacing: 0;
  48.             border-collapse: collapse;
  49.             width: 100%;
  50.             margin-top: 0;
  51.             margin-bottom: 16px;
  52.         }
  53.         table th, table td {
  54.             padding: 6px 13px;
  55.             border: 1px solid #dfe2e5;
  56.         }
  57.         table tr {
  58.             background-color: #fff;
  59.             border-top: 1px solid #c6cbd1;
  60.         }
  61.         table tr:nth-child(2n) {
  62.             background-color: #f6f8fa;
  63.         }
  64.         .badge {
  65.             margin-right: 5px;
  66.         }
  67.         .footer {
  68.             margin-top: 40px;
  69.             font-size: 0.9em;
  70.             color: #6a737d;
  71.             text-align: center;
  72.         }
  73.     </style>
  74. </head>
  75. <body>

  76.     <h1>CsfStudio - Red Alert 2 String Table Editor</h1>

  77.     <p>
  78.         <img src="https://img.shields.io/badge/.NET%20Framework-4.0-blue.svg" alt=".NET Framework" class="badge">
  79.         <img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT" class="badge">
  80.     </p>

  81.     <p>CsfStudio 是一个强大的命令行工具,专为处理《红色警戒 2》(Red Alert 2)的字符串表文件(.csf)而设计。它支持多种格式之间的转换、字符串表合并以及差分(减法)操作。</p>

  82.     <h2>功能特性</h2>
  83.     <ul>
  84.         <li>🔄 <strong>双向转换</strong>:支持在 CSF、INI、JSON、YAML 和 LLF 格式之间进行互转</li>
  85.         <li>🧩 <strong>合并操作</strong>:将多个字符串表文件合并为一个</li>
  86.         <li>✂️ <strong>差分操作</strong>:移除在其他文件中已存在的标签(Labels)</li>
  87.         <li>🔠 <strong>编码修复</strong>:修正现有文件中的文本编码问题</li>
  88.         <li>📊 <strong>元数据保留</strong>:保持版本号和语言信息不变</li>
  89.         <li>✅ <strong>验证</strong>:严格的标签名称和格式验证</li>
  90.         <li>⚡ 基于 .NET Framework 4.0 的快速处理</li>
  91.     </ul>

  92.     <h2>支持的格式</h2>

  93.     <h3>CSF 格式 (Command &amp; Conquer String File)</h3>
  94.     <ul>
  95.         <li><strong>扩展名</strong>:<code>.csf</code></li>
  96.         <li><strong>类型</strong>:二进制游戏格式</li>
  97.         <li><strong>结构</strong>:</li>
  98.     </ul>
  99.     <pre><code>偏移量  类型      描述
  100. 0x00    char[4]   头部 " FSC"
  101. 0x04    int32     版本 (通常为 3)
  102. 0x08    int32     标签计数
  103. 0x0C    int32     字符串计数
  104. 0x10    int32     未使用
  105. 0x14    int32     语言 ID
  106. ...     ...       标签条目:
  107. char[4]   " LBL" 头部
  108. int32     值计数
  109. int32     标签名称长度
  110. char[]    标签名称 (ASCII)
  111. char[4]   " RTS" 或 "WRTS"
  112. int32     值长度
  113. byte[]    值 (UTF-16 非编码)</code></pre>

  114.     <h3>INI 格式</h3>
  115.     <ul>
  116.         <li><strong>扩展名</strong>:<code>.ini</code></li>
  117.         <li><strong>类型</strong>:基于文本的配置</li>
  118.         <li><strong>结构</strong>:</li>
  119.     </ul>
  120.     <pre><code>[SadPencil.Ra2CsfFile.Ini]
  121. IniVersion = 2
  122. CsfVersion = 3
  123. CsfLang = 0

  124. [LABEL_NAME]
  125. Value = 单行值
  126. ValueLine2 = 附加行</code></pre>

  127.     <h3>JSON 格式</h3>
  128.     <ul>
  129.         <li><strong>扩展名</strong>:<code>.json</code></li>
  130.         <li><strong>类型</strong>:标准数据交换格式</li>
  131.     </ul>
  132.     <pre><code>{
  133.   "version": 3,
  134.   "language": 0,
  135.   "labels": {
  136.     "LABEL1": "值 1",
  137.     "LABEL2": "多行\n值"
  138.   }
  139. }</code></pre>

  140.     <h3>YAML 格式</h3>
  141.     <ul>
  142.         <li><strong>扩展名</strong>:<code>.yaml</code> 或 <code>.yml</code></li>
  143.         <li><strong>类型</strong>:人类可读的数据序列化格式</li>
  144.     </ul>
  145.     <pre><code>version: 3
  146. language: 0
  147. version_yaml: 1.2
  148. labels:
  149.   LABEL1: 值 1
  150.   LABEL2: |
  151.     多行
  152.     值</code></pre>

  153.     <h3>LLF 格式 (标签语言文件 / Label Language File)</h3>
  154.     <ul>
  155.         <li><strong>扩展名</strong>:<code>.llf</code></li>
  156.         <li><strong>类型</strong>:人类可读的编辑格式</li>
  157.     </ul>
  158.     <pre><code># filename
  159. # version: 3
  160. # language: 0
  161. # csf count: 42
  162. # build time: 2025-08-01 14:30:00

  163. KEY_SIMPLE: 简单值
  164. KEY_MULTILINE: >-
  165.     多行
  166.     值</code></pre>

  167.     <h3>TXT 格式</h3>
  168.     <ul>
  169.         <li><strong>扩展名</strong>:<code>.txt</code></li>
  170.         <li><strong>类型</strong>:简单文本格式(兼容 CSFTool)</li>
  171.     </ul>
  172.     <pre><code>KEY_SIMPLE|简单值
  173. KEY_MULTILINE|多行\n值</code></pre>

  174.     <h2>编码修复功能</h2>
  175.     <p>使用 <code>--fix-encoding</code> 修复解释错误的文本编码:</p>
  176.     <pre><code>CsfStudio.exe -i input.csf -o fixed.csf --fix-encoding windows-1251</code></pre>
  177.     <p><strong>支持的编码</strong>:</p>
  178.     <ul>
  179.         <li><code>gb18030</code> (中文)</li>
  180.         <li><code>gb2312</code> (中文)</li>
  181.         <li><code>windows-1251</code> (西里尔文/俄文)</li>
  182.         <li><code>windows-1252</code> (西欧语言)</li>
  183.         <li><code>iso-8859-1</code> (Latin-1)</li>
  184.         <li><code>utf-8</code></li>
  185.         <li><code>unicode</code> (UTF-16)</li>
  186.     </ul>

  187.     <h2>命令行用法</h2>
  188.     <h3>基本语法</h3>
  189.     <pre><code>CsfStudio.exe -i input.ext -o output.ext --to-format
  190. CsfStudio.exe -i file1.ext,file2.ext -o result.ext --operation</code></pre>

  191.     <h3>操作指令</h3>
  192.     <table>
  193.         <thead>
  194.             <tr>
  195.                 <th>命令</th>
  196.                 <th>描述</th>
  197.             </tr>
  198.         </thead>
  199.         <tbody>
  200.             <tr>
  201.                 <td><code>-i</code>, <code>--input</code></td>
  202.                 <td>输入文件路径(支持多个)</td>
  203.             </tr>
  204.             <tr>
  205.                 <td><code>-o</code>, <code>--output</code></td>
  206.                 <td>输出文件路径</td>
  207.             </tr>
  208.             <tr>
  209.                 <td><code>--to-ini</code></td>
  210.                 <td>转换为 INI 格式</td>
  211.             </tr>
  212.             <tr>
  213.                 <td><code>--to-csf</code></td>
  214.                 <td>转换为 CSF 格式</td>
  215.             </tr>
  216.             <tr>
  217.                 <td><code>--to-json</code></td>
  218.                 <td>转换为 JSON 格式</td>
  219.             </tr>
  220.             <tr>
  221.                 <td><code>--to-yaml</code></td>
  222.                 <td>转换为 YAML 格式</td>
  223.             </tr>
  224.             <tr>
  225.                 <td><code>--to-llf</code></td>
  226.                 <td>转换为 LLF 格式</td>
  227.             </tr>
  228.             <tr>
  229.                 <td><code>--to-txt</code></td>
  230.                 <td>转换为 TXT 格式</td>
  231.             </tr>
  232.             <tr>
  233.                 <td><code>--merge</code></td>
  234.                 <td>合并多个文件</td>
  235.             </tr>
  236.             <tr>
  237.                 <td><code>--subtract</code></td>
  238.                 <td>减去(移除)来自其他文件的标签</td>
  239.             </tr>
  240.             <tr>
  241.                 <td><code>--fix-encoding</code></td>
  242.                 <td>修复文本编码</td>
  243.             </tr>
  244.             <tr>
  245.                 <td><code>-h</code>, <code>--help</code></td>
  246.                 <td>显示帮助信息</td>
  247.             </tr>
  248.         </tbody>
  249.     </table>

  250.     <h3>示例</h3>
  251.     <pre><code># 将 CSF 转换为 LLF
  252. CsfStudio.exe -i stringtable01.csf -o stringtable01.llf --to-llf

  253. # 将 LLF 转换为 INI
  254. CsfStudio.exe -i stringtable01.llf -o stringtable01.ini --to-ini

  255. # 合并两个文件
  256. CsfStudio.exe -i stringtable01.json,stringtable02.json -o stringtable03.json --merge

  257. # 差分操作(移除标签)
  258. CsfStudio.exe -i stringtable01.llf,stringtable02.llf -o stringtable03.llf --subtract

  259. # 修复编码
  260. CsfStudio.exe -i stringtable01.csf -o stringtable02.csf --fix-encoding windows-1251</code></pre>

  261.     <p><strong>注意:</strong> <code>--merge</code>(合并)、<code>--subtract</code>(差分)和 <code>--fix-encoding</code>(编码修复)操作仅适用于<strong>相同格式</strong>的文件(即扩展名 <code>.ext</code> 必须一致)!</p>

  262.     <h2>格式对比矩阵</h2>
  263.     <table>
  264.         <thead>
  265.             <tr>
  266.                 <th>特性</th>
  267.                 <th>CSF</th>
  268.                 <th>INI</th>
  269.                 <th>JSON</th>
  270.                 <th>YAML</th>
  271.                 <th>LLF</th>
  272.                 <th>TXT</th>
  273.             </tr>
  274.         </thead>
  275.         <tbody>
  276.             <tr>
  277.                 <td><strong>人类可读</strong></td>
  278.                 <td>❌</td>
  279.                 <td>✅</td>
  280.                 <td>🟡</td>
  281.                 <td>✅</td>
  282.                 <td>✅</td>
  283.                 <td>✅</td>
  284.             </tr>
  285.             <tr>
  286.                 <td><strong>元数据支持</strong></td>
  287.                 <td>✅</td>
  288.                 <td>✅</td>
  289.                 <td>✅</td>
  290.                 <td>✅</td>
  291.                 <td>✅</td>
  292.                 <td>🟡</td>
  293.             </tr>
  294.             <tr>
  295.                 <td><strong>多行值支持</strong></td>
  296.                 <td>✅</td>
  297.                 <td>✅</td>
  298.                 <td>✅</td>
  299.                 <td>✅</td>
  300.                 <td>✅</td>
  301.                 <td>✅</td>
  302.             </tr>
  303.             <tr>
  304.                 <td><strong>语言支持</strong></td>
  305.                 <td>✅</td>
  306.                 <td>✅</td>
  307.                 <td>✅</td>
  308.                 <td>✅</td>
  309.                 <td>✅</td>
  310.                 <td>🟡</td>
  311.             </tr>
  312.             <tr>
  313.                 <td><strong>版本支持</strong></td>
  314.                 <td>✅</td>
  315.                 <td>✅</td>
  316.                 <td>✅</td>
  317.                 <td>✅</td>
  318.                 <td>✅</td>
  319.                 <td>🟡</td>
  320.             </tr>
  321.             <tr>
  322.                 <td><strong>编辑复杂度</strong></td>
  323.                 <td>高</td>
  324.                 <td>中</td>
  325.                 <td>低</td>
  326.                 <td>低</td>
  327.                 <td>低</td>
  328.                 <td>低</td>
  329.             </tr>
  330.             <tr>
  331.                 <td><strong>文件大小</strong></td>
  332.                 <td>小</td>
  333.                 <td>中</td>
  334.                 <td>大</td>
  335.                 <td>中</td>
  336.                 <td>中</td>
  337.                 <td>中</td>
  338.             </tr>
  339.             <tr>
  340.                 <td><strong>最佳用例</strong></td>
  341.                 <td>游戏</td>
  342.                 <td>工具</td>
  343.                 <td>API</td>
  344.                 <td>配置</td>
  345.                 <td>编辑</td>
  346.                 <td>工具</td>
  347.             </tr>
  348.         </tbody>
  349.     </table>

  350.     <h2>技术规格</h2>
  351.     <ol>
  352.         <li><strong>字符编码</strong>:
  353.             <ul>
  354.                 <li>CSF:UTF-16 配合按位取反(bitwise NOT)编码</li>
  355.                 <li>文本格式:UTF-8</li>
  356.                 <li>特殊处理:Windows-1252 字符 (128-159)</li>
  357.             </ul>
  358.         </li>
  359.         <li><strong>标签规则</strong>:
  360.             <ul>
  361.                 <li>仅限 ASCII 字符 32-126</li>
  362.                 <li>不区分大小写(存储为小写)</li>
  363.                 <li>无明确长度限制</li>
  364.             </ul>
  365.         </li>
  366.         <li><strong>多行处理</strong>:
  367.             <ul>
  368.                 <li>所有格式均支持多行值</li>
  369.                 <li>换行符统一标准化为 LF (<code>\n</code>)</li>
  370.                 <li>LLF 和 YAML 提供最自然的表现形式</li>
  371.             </ul>
  372.         </li>
  373.         <li><strong>元数据保留</strong>:
  374.             <ul>
  375.                 <li>在所有转换中保留版本(默认为 3)和语言</li>
  376.                 <li>合并操作中使用第一个文件的元数据</li>
  377.                 <li>语言 ID:0=英语(美), 1=英语(英), ..., 9=中文, -1=未知</li>
  378.             </ul>
  379.         </li>
  380.     </ol>

  381.     <h2>从源码构建</h2>
  382.     <h3>先决条件</h3>
  383.     <ul>
  384.         <li>.NET Framework 4.0</li>
  385.         <li>Visual Studio 2019 或更高版本</li>
  386.     </ul>
  387.     <h3>步骤</h3>
  388.     <ol>
  389.         <li>克лон仓库:<br><code>git clone https://github.com/YoVVassup/Ra2CsfFile.git</code></li>
  390.         <li>在 Visual Studio 或 Rider (JetBrains) 中打开 <code>SadPencil.Ra2CsfFile.sln</code></li>
  391.         <li>还原 NuGet 包</li>
  392.         <li>构建解决方案</li>
  393.     </ol>

  394.     <h2>许可证</h2>
  395.     <p>MIT License - 详情请参阅 <a href="https://github.com/YoVVassup/Ra2CsfFile/blob/cli/LICENSE">LICENSE</a> 文件</p>

  396.     <h2>致谢</h2>
  397.     <ul>
  398.         <li>Westwood Studios:创造了《命令与征服:红色警戒 2》</li>
  399.         <li>Modding 社区:提供了 CSF 格式的文档</li>
  400.         <li>本项目中使用的开源库的贡献者们</li>
  401.     </ul>

  402.     <h2>备注</h2>
  403.     <p>参考资料:https://modenc.renegadeprojects.com/CSF_File_Format<br>
  404.     获取 .Net Target Framework SDK 的简便方法:运行 <a href="https://github.com/YoVVassup/Ra2CsfFile/blob/main/Get_.NET_Target_Framework.ps1">Get_.NET_Target_Framework.ps1</a><br>
  405.     来自 <a href="https://github.com/Starkku/CSFTool">CSFTool</a> 的 TXT 文件格式遵循 <a href="https://github.com/Starkku/CSFTool/blob/master/LICENSE.txt">GPL Version 3</a> 许可。</p>

  406.     <h2>版本历史 SadPencil.Ra2CsfFile (DLL)</h2>
  407.     <pre><code>v2.2.2: 增加了 TXT 序列化支持
  408. v2.2.1: 增加了 LLF 序列化支持
  409. v2.2.0: 增加了 JSON 和 YAML 序列化支持
  410. v2.1.3: 降级以兼容 .NET Framework 4.0
  411. v2.1.2: 默认禁用 Encoding1252WriteWorkaround;为 SadPencil.Ra2CsfFile 命名空间添加 CLSCompliant 属性
  412. v2.1.1: 修复了部分标签名无法从 .ini 文件成功加载的问题
  413. v2.1.0: API 重大变更:更改了 Csf.AddLabel() 的行为,采用“添加并替换”逻辑,以便能加载原始 ra2.csf 文件
  414. v2.0.2: 移除了 ini 文件中 "=" 符号周围的空格,以修复处理包含 " = " 模式的值时的错误
  415. v2.0.1: 修复了包含 non-lowercase 标签名的 CSF 文件无法加载的错误
  416. v2.0.0: 迁移至 .NET Standard 2.0;使用 ini-parser-netstandard 替换了 MadMilkman.Ini 依赖项;添加了 Csf.RemoveLabel() 方法。
  417. v1.3.1: API 重大变更:Labels.Add 将被 AddLabel 取代;为原始 RA2 字体添加了编码 1252 变通选项;为 CsfFile 添加了克隆构造函数。
  418. v1.2.2: 现在容忍标签中的空格,库不再会对 RA2 中的字符串表文件报错。
  419. v1.2.1: 修复了 ini 文件中部分标签未被加载的错误。
  420. v1.2.0: API 重大变更:CsfFile.Labels 现在每个标签仅存储一个值,因为游戏不使用其余值(如果有);API 变更:废弃 CsfFile.GetCsfLang(),改用 CsfLangHelper.GetCsfLang();废弃 CsfFile.LoadFromIniFile(),改用 CsfFileIniHelper.LoadFromIniFile();废弃 CsfFile.WriteIniFile(),改用 CsfFileIniHelper.WriteIniFile()。
  421. v1.1.1: 添加了 XML 文档;使用 Release 配置重新发布了库。
  422. v1.1.0: 修复了多行文本会被错误修剪的错误;现在会检查标签名中的无效字符。</code></pre>

  423.     <h2>发布和源代码</h2>
  424.     <p>
  425.         https://github.com/YoVVassup/Ra2CsfFile/tree/cli
  426.         https://github.com/YoVVassup/Ra2CsfFile/releases/tag/CLI_v.1.0.3
  427.     </p>

  428.     <div class="footer">
  429.         <strong>CsfStudio</strong> - 您处理红色警戒 2 字符串表的强力工具!
  430.     </div>



  431. </body>
  432. </html>
复制代码
发表于 2026-2-15 20:27:06 | 显示全部楼层
您能解释一下您发的这是什么东西吗?这个格式我有点没看明白。
回复

使用道具 举报

发表于 2026-2-15 20:32:53 | 显示全部楼层
论坛给你识别成代码块了
回复

使用道具 举报

 楼主| 发表于 2026-2-15 23:12:59 | 显示全部楼层
论坛的限制太多了。 我想添加我自己的工作工具 .csf。 我在html中格式化了文本,但事实证明,论坛不支持html代码插入。
html-url
回复

使用道具 举报

 楼主| 发表于 2026-2-15 23:17:55 | 显示全部楼层
html-url
回复

使用道具 举报

 楼主| 发表于 2026-2-15 23:23:48 | 显示全部楼层
为什么你不能删除你自己的评论或编辑一个主题? 好吧,是的,我可能没有权利这样做,因为为此你需要获得评级。
https://jsontotable.org/html-viewer?guid=4704389c-fc79-47ac-ba3f-721a4c884a08
回复

使用道具 举报

发表于 2026-2-16 01:05:10 | 显示全部楼层
没看懂()
回复

使用道具 举报

发表于 2026-2-26 20:58:04 | 显示全部楼层
YoWassup 发表于 2026-2-15 23:12
论坛的限制太多了。 我想添加我自己的工作工具 .csf。 我在html中格式化了文本,但事实证明,论坛不支持htm ...

我看明白了,但你可以想一下,使用压缩包打包这个html,而不是长篇大论,并且有个介绍更能让人理解。
另外就是可以推相关链接就OK了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|Archiver|手机版|管理员邮箱|红警DIY论坛 |网站地图

GMT+8, 2026-6-2 01:59 , Processed in 0.073434 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表