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

时间:2014-01-18 13:25:07

标签: unicode utf-8 perforce

我已将整个分支与.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. 提交文件(现在文件仍保留前3个字节的BOM)
  5. 从工作区中删除文件
  6. 获取文件的最新版本(现在文件开头不包含BOM)

1 个答案:

答案 0 :(得分:4)

好的,Hans Passant的评论鼓励我重新检查P4CHARSET,最后,答案分为两部分:


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

p4 set P4CHARSET=utf8-bom

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

p4 set P4CHARSET=utf8

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

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

备注:

  • 如果您通常将以上两种方式结合使用Perforce ,则需要应用这两种解决方案,否则您将不断获得混合结果
  • 如果您想立即向现有文件添加/删除BOM ,请调整上述设置,然后从工作区中删除文件并重新添加(请参阅步骤 5 并在问题中发布了 6 的示例)。更改文件内容的其他服务器操作(集成,合并等)将执行类似的操作
  • 了解其他编码选项及其对BOM的影响,请参阅Internationalization Notes for P4D, the Perforce Server and Perforce client applications
  • 中的第二个表格