2011-11-15 30 views
1

我有一个解析标准文本文件中的文本的Cocoa应用程序。使用nano和pico等终端程序编辑文件时,有时会注意到^M字符出现。我无法在更高版本的Mac OS X上重现此功能,但它似乎在10.5版本中比比皆是。奇怪的是,当我从一个10.5系统中取得一个^M角色的文件时,它神奇地消失在10.6+以上;我假设这是因为Mac OS开始将linux风格的换行转换为Mac风格(??)。因此,在调试时修复问题使得它有点复杂,因为我的XCode只安装在10.7上。解析出^ M个字符

我需要一种方法来查找^M字符,并在解析文件时将其替换为更标准的东西(如\n)。我需要寻找什么类型的角色?它似乎并不是一个\ n,同样,\ r \ n似乎也没有任何组合。 ^M仍然存在。

回答

0

^M是DOS/Windows中的标准回车符。

我只是使用dos2unix程序来摆脱它们。

+0

没有办法通过代码来做到这一点? – bugfixr

+1

哦,当然。我想你只需要用“”替换“\ r”;只需删除“\ r” – JohnnyK

1

这在XCode中很容易管理。

只需选择要更改行尾的文件,然后打开实用程序面板,即可更改行结尾。

像这样:

enter image description here

+1

我需要在运行时执行此操作。一些运行该应用程序的人使用nano编辑文件,然后使用Dos风格换行符结束。我真的不能要求他们邮寄我的文件...;)有没有办法使用objective-c来做到这一点? – bugfixr

1

我不是MacOS的用户,一般来说,所以我只是猜测这将工作。在典型的类Unix系统上,您可以使用Ctrl-V来获取您输入的下一个控制字符,使其显示为可见的字符序列。因此,例如,您可以通过首先输入Ctrl-V,然后按下Return键来获得想要出现的^ M。请注意,在这种情况下,在屏幕上出现的^ M与您首次输入^字符然后是M字符时出现的^ M不同(从软件的角度来看)。通过这种方式,您可以使用正则表达式来替代^ M控制字符表示的实例。

正如Jakrabbit所建议的那样,您也可以使用dos2unix来过滤文件 - 假设它在Mac上可用。

1

“^ M”是ASCII换行符的表示。这是ASCII(和UTF-8)中的字符代码13,因此在解析文件时,请查找值为13的字符并忽略它们。