如何防止从 Perforce unicode 文件中删除 BOM

mir*_*lav 4 unicode perforce utf-8

我已将带有 .NET 和 SQL 源的整个分支转换为带有 BOM 的 UTF-8,在同一操作中将它们的 Perforce 文件类型更改为Unicode。(编码差异可能听起来令人困惑,但在 Perforce 中,Unicode文件类型表示 UTF-8 文件内容。)但后来我发现 Perforce 默默地从 UTF-8 文件中消除了 BOM 标记。是否可以设置 Perforce 以在Unicode文件类型的文件中保留 UTF-8 BOM 标记?我找不到它的文档。

Perforce 服务器切换到Unicode模式,连接编码为UTF-8无 BOM(但将其更改为带 BOM 的 UTF-8没有任何区别)。

例子:

  1. 从 Perforce 检出源文件
  2. 将文件类型更改为Unicode
  3. 将文件内容转换为“带有 BOM 的 UTF-8”格式
  4. 提交文件(现在文件仍将 BOM 保留在前 3 个字节中)
  5. 从工作区中删除文件
  6. 获取文件的最新版本(现在文件开头不包含 BOM)

mir*_*lav 5

好的,Hans Passant 的评论鼓励我重新审视 P4CHARSET,最后,答案有两个部分:


对于 Perforce 命令行访问P4CHARSET变量设置控制行为。要启用将 BOM 添加到Unicode类型的文件,请使用命令

p4 set P4CHARSET=utf8-bom
Run Code Online (Sandbox Code Playgroud)

为了让这些文件没有BOM,请使用

p4 set P4CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)

对于 P4V Perforce Visual Client,可以通过菜单Connection>更改设置Choose Character Encoding...。使用 valueUnicode (UTF-8)启用添加 BOM 并Unicode (UTF-8, no BOM)抑制它。

  • 如果菜单项Choose Character Encoding...被禁用,请确保以下内容(然后再次检查)
    • P4V 与服务器的连接已打开并正常工作
    • 包含仓库/工作区树的窗格已聚焦(单击内部以重新确保这一点)

笔记:

  • 如果您通常结合上述两种方式来访问 Perforce,则需要同时应用这两种解决方案,否则您将不断获得混合结果
  • 如果您想立即向/从现有文件中添加/删除 BOM,请调整上述设置,然后从工作区中删除文件并再次添加它们(请参阅问题中发布的示例的步骤56)。更改文件内容的其他服务器操作(集成、合并等)将执行类似的操作
  • 有关其他编码选项及其对 BOM 的影响,请参阅P4D、Perforce Server 和 Perforce 客户端应用程序的国际化说明中的第二个表