1

我们主要在 Windows 环境中开发我们的 PHP 应用程序,并将我们的文本源文件存储在 PC/ANSI中。

然而现在,一位使用 Mac 平台的开发人员加入了我们,我们在他的机器上创建“补丁”时遇到了问题。当他进行任何更改并执行以下操作时:

svn diff > patchfile.patch

他生成了一个补丁文件,表明源代码文件的每一行都已被修改(显然不是这种情况)。

我尝试将测试 ANSI 文件保存为:

PC / UTF-8 (using UTFCast Express which I writes the BOM by default)
PC / UTF-8 (using Notepad++ "Encoding > Convert to UTF-8" - which writes the BOM)

也:

PC / UTF-8 (using Notepad++ "Encoding > Convert to UTF-8 without BOM")
PC / UTF-8 (using Notepad++ "Encoding > Encode in UTF-8 without BOM")

对于所有这些情况,每当他进行更改并执行 svn diff > patchfile.patch 时,它会输出所有行,就好像所有行都已更改一样!

[我们也尝试对最后 3 个执行“svn diff -x -p > patchfile.patch” - 没有区别]

顺便说一句,使用最后两个选项生成的文件在我的 PC 机器上继续显示为 ANSI。两者似乎根本没有修改文件,并且在 DOS 提示符下执行“fc”(文件比较)并没有发现任何区别。

我应该使用什么编码进行跨平台开发?

4

2 回答 2

5

不是字符编码问题,而是行尾问题。Windows 使用 CR-LF (13/10),Mac 现在只使用(unix 风格)LF (10)。

在相关文件上设置颠覆属性svn:eol-style=native使其正常工作。

于 2011-08-16T04:01:07.100 回答
0

Windows 使用“\r\n”(换行符/回车符)行结尾。

OS/X 使用 unix "\n" 字符。

以前的 OS9 使用“\r”。

我不确定为什么要对源代码进行 UTF-8 字符编码,除非您一直对所有文件都这样做,特别是如果您都是该项目的英语使用者。

您的 mac 开发人员应该尝试将他的编辑器设置为使用 PC 行尾,以与您其他人兼容。编辑器通常会感知到正确的行尾并为现有文件使用正确的行尾,但对于新创建的文件,它们可能会被设置为使用其操作系统默认值。

您可以尝试使用Flip,这是一个跨平台命令行工具,可将行尾字符从一个操作系统转换为另一个操作系统。

于 2011-08-16T04:16:11.190 回答