【问题标题】:BOM issue in unicode perforce serverunicode perforce 服务器中的 BOM 问题
【发布时间】:2016-07-12 05:42:07
【问题描述】:

重现问题的步骤:

  1. 向我的 P4 服务器添加一个文件,该文件被检测为 'utf8' 文件类型。

    我添加的文件是没有BOM的utf8编码。

    vim 中的 nobomb 显示

p4 客户端将其检测为 'utf8'

如果我在其他设备上执行相同的步骤,文件类型会被检测为“unicode”;

  1. 从本地删除文件,然后从服务器同步。出现问题:文件变为带有 BOM 的 utf8。

同步文件,文件变成带BOM的utf

如您所知,html 文件中的 BOM 会导致很多问题....有没有人可以帮我解决这个问题?

环境:

  1. 客户端版本:Rev. Perforce 可视化客户端/MACOSX107X86_64/2015.2/1312139

  2. p4 服务器处于“unicode”模式。

  3. 工作站的 P4CHARSET 设置为 utf8。

【问题讨论】:

    标签: perforce


    【解决方案1】:

    'utf8' 类型的文件始终与 BOM 同步 - 'utf8' 类型就是这样设计的(请参阅relnotes,#998379)。如果您不想要 BOM,则必须将其更改为“text”或“unicode”。

    您描述的是 15.2 中的一个已知错误(job083614):“如果 P4CHARSET=utf8 并且服务器是 unicode 并且文件的字节数 >x80 并且是有效的 utf8”,那么文件被检测为 utf8,应该是 unicode。希望这个修复(没有承诺)在 16.2 中。

    早期的 p4 客户端

    如果您不想输入“utf8”而是输入“unicode”:

    • 使用“p4 add -t unicode ”添加文件
    • 在提交之前更改文件的类型。
    • 使用 typemap 将具有特定扩展名的所有文件添加为 'unicode'。
    • 使用客户端(p4v、p4 命令行)添加文件。后续同步/提交可以是更高版本。

    你也可以有一个触发器来阻止 utf8 文件类型被提交(change-submit)

    【讨论】:

    • @J B,TNX,你拯救了我的一天。将 p4 客户端版本回滚到 15.1 可解决此问题。
    【解决方案2】:

    相信在the Perforce Internationalization Notes中可以找到你想要的答案

    在您的问题中,您链接到 2014.2 国际化说明,但 utf8 文件类型比这更新;它是在 2015.2 版本中添加的。很明显,您的服务器是 2015.2 或更高版本。我链接到 2016.1 内部化说明。最好阅读您正在使用的服务器的确切版本的说明。

    文件出现在您的工作站上的方式是:

    1. 服务器的“unicode”设置:您的服务器似乎支持 Unicode
    2. 文件类型(unicode、utf8 或 utf16):您似乎至少有 unicode 和 utf8 类型的文件
    3. 工作站的 P4CHARSET。从 2014.2 版本开始,如果您没有显式设置 P4CHARSET,服务器将尝试自动分配一个值。

    由于您似乎正在使用 P4V 将文件同步到您的工作站,因此您还必须考虑 P4V 代表您应用了哪些设置。您可能会发现使用“p4”命令行工具将某些文件同步到您的工作站会更清楚。然后,您可以尝试不同的文件类型、不同的 P4CHARSET 设置等,直到找到能够为您提供预期结果的组合。

    但是,再次提醒您注意您正在使用的客户端和服务器软件的确切版本,并阅读确切适用于这些版本的说明,因为其中一些行为最近发生了变化,这可能会让您感到困惑。

    【讨论】:

    • 嗨,布莱恩。 Tnx 供您参考。但我仍然找不到我的答案。
    • 1.是的,我的服务器是“unicode”。 2.我添加的文件是utf8编码。 3.工作站的P4CHARSET设置为utf8。正如我所提到的,当我将文件添加到 P4 服务器时,文件类型被检测为 utf8。之后,如果我删除本地文件,并从服务器同步文件。文件变成带有 BOM 的 UTF。
    • 在哪里可以知道 2015.2 中添加了 utf8 文件类型?文档中的下一个描述? ///////////////#1210497 (Bug #79997) * 如果 P4CHARSET 设置为像 utf16 这样的宽字符集,p4 命令行将尝试发现一个好的字符集来使用. p4 set 现在允许在“set”动词之前使用 -C 和 -Q。不区分大小写的平台现在会检查是否将“p4charset”设置为有问题的值。
    • 所以如果我使用2015.2之前的客户端,它永远不会将文件检测为utf8?
    • 我再次描述问题,请再阅读问题描述?
    猜你喜欢
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 2020-10-06
    相关资源
    最近更新 更多