【问题标题】:How to keep BOM from removal from Perforce unicode files如何防止 BOM 从 Perforce unicode 文件中删除
【发布时间】:2014-02-07 21:29:57
【问题描述】:

我已将带有 .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(但将其更改为 UTF-8 with BOM没有任何区别)。

例子:

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

【问题讨论】:

  • 注意 P4CHARSET 值。如果它是“utf8”,那么它将剥离 BOM,请改用“utf8-bom”。 More here.
  • @HansPassant - 谢谢汉斯,它有帮助。请将此添加为答案,我会接受。
  • 我只是在猜测。请发布您自己的答案并解释您发现了什么以及如何修复它。

标签: unicode utf-8 perforce


【解决方案1】:

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


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

p4 set P4CHARSET=utf8-bom

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

p4 set P4CHARSET=utf8

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

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

注意事项:

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

【讨论】:

  • 我按照你的步骤,但仍然得到 BOM 文件。
  • @Leon - 您可以验证您的新设置是否正确。如果您仍然遇到问题,请打开新问题并详细描述您设置了什么,您尝试了什么以及仍然无法正常工作。
  • 你能帮忙看看这个案例吗? stackoverflow.com/questions/38320814/…
  • P4V 菜单项“选择字符编码”在我的计算机上被禁用(即使在聚焦仓库树之后)。
  • 对我不起作用。我有 winansi 服务器(启用 unicode)和 winansi P4V 客户端(2017.2)。 UTF8-BOM 文件无法在坩埚/鱼眼中进行区分。所以我需要将文件类型映射回文本,这有点丑陋。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
  • 2011-01-10
  • 1970-01-01
  • 2017-12-27
相关资源
最近更新 更多