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

标签 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 没有任何区别)。

例子:

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

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

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

    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 与服务器的连接已打开且正在运行
  • 包含仓库/工作区树的
  • Pane 已聚焦(单击内部以重新确保这一点)


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

    关于unicode - 如何防止从 Perforce unicode 文件中删除 BOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21204743/

    相关文章:

    java在处理带有BOM字符串的utf-8时行为不一致

    PHP 将 Windows-1256 编码的文本转换为 UTF-8

    perforce - 如何在两个不同的服务器之间移动 perforce 仓库,以便复制修订历史记录,但不复制用户信息和工作区?

    c++ - U+ 究竟代表什么?为什么我不能在我的 C++ 应用程序中创建一个 Unicode 中间字符串表?

    file - Perforce 中流之间的差异

    Perforce P4V 将新文件添加到仓库

    mysql - 告诉 MySQL 连接使用 Django 的 UTF-8

    pdf - 如何使用非 ASCII 编码从 PDF 中剪切粘贴?

    unicode - Haskell:将 unicode 整数转换为实际的 unicode 字符

    python - Windows 文件名在 Linux 中显示损坏的字符