什么编码用于跨平台开发(PC,Mac,Linux)?

时间:2011-08-16 03:57:27

标签: php encoding utf-8 cross-platform byte-order-mark

我们主要在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'(文件比较)并没有发现任何差异。

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

2 个答案:

答案 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这是一个跨平台的命令行工具,可以将行结尾字符从一个操作系统转换为另一个操作系统。