我们主要在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'(文件比较)并没有发现任何差异。
我应该使用什么编码进行跨平台开发?
答案 0 :(得分:5)
不是字符编码问题,而是行结束问题。 Windows使用CR-LF(13/10),Mac现在只使用(unix风格)LF(10)。
在相关文件上设置subversion属性 svn:eol-style = native ,使其正常工作。
答案 1 :(得分:0)
Windows使用“\ r \ n”(换行符/回车符)行结束。
OS / X使用unix“\ n”字符。
以前的OS9使用“\ r”。
我不确定你为什么要在源代码中使用UTF-8字符编码,除非你一直在为你的所有文件做这些,特别是如果你们都是项目的英语使用者。
您的mac dev应该尝试将其编辑器设置为使用PC行结尾,以便与其他人兼容。通常编辑者会感知正确的行结尾并使用正确的行结束现有文件,但对于新创建的文件,可能会将其设置为使用其操作系统默认值。
您可以试用flip这是一个跨平台的命令行工具,可以将行结尾字符从一个操作系统转换为另一个操作系统。