客户正在向我发送一个.csv文件,其中换行符由序列0xD 0xD 0xA
组成。据我所知,换行符是来自Mac或Unix的0xA
或来自Windows的0xD 0xA
。
0xD 0xD 0xA
是否有任何已知编码?是否有任何已知的节约顺序会破坏导致此问题的文件行结尾(我认为客户使用的是Mac)?
文件不以任何编码标记开头,而是直接从文本内容开始。如果使用代码页1252打开,则文本会正确显示。
答案 0 :(得分:29)
CRCRLF被称为Windows XP notepad word wrap bug的结果。
供将来参考,以下是链接博客的相关摘录:
在Windows计算机上按Enter键时,实际存储了两个字符:回车符(CR)和换行符(LF)。操作系统始终以与Enter键相同的方式解释字符序列CR LF:它移动到下一行。但是,当自己有额外的CR或LF字符时,这有时会导致问题。
Windows XP版本的记事本中存在一个错误,可能会导致额外的CR字符存储在显示窗口中。该错误发生在以下情况:
如果您打开了自动换行选项并且显示窗口包含环绕的长行,则保存文件会导致记事本在显示窗口的每个换行点插入字符CR CR LF,但不会在保存中插入文件。
如果将CR CR LF字符复制并粘贴到其他程序中,则可能会导致奇怪。如果您调整记事本窗口的大小,它们还会阻止记事本正确地重新包装行。
您可以通过关闭自动换行功能删除CR CR LF字符,然后根据需要将其重新打开。但是,执行此操作时,光标会在显示窗口的开头重新定位。
答案 1 :(得分:5)
Netscape ANSI编码文件使用0D 0D 0A作为换行符。
答案 2 :(得分:1)
这通常源于修订控制系统中的错误或类似错误。这是来自CVS的产品,如果从Windows到Unix服务器签入文件,然后再次签出...
换句话说,它刚刚被打破......
答案 3 :(得分:1)
众所周知,Apple邮件会对文本和csv附件出站产生编码错误。实质上,它用每行上的软换行替换行终止符,在编码中看起来像= 0D。如果附件通过电子邮件发送到Outlook,Outlook会看到软换行符,删除=然后附加实际换行符,即0D0A,这样您就会在每行末尾得到0D0D0A(cr cr lf)。编码应为= 0D =如果它是mac格式文件(或任何其他unix风格)或= 0D0A =如果它是Windows格式文件。
如果您通过电子邮件发送苹果邮件(至少是小牛或优胜美地),使附件不是文本或csv文件是可接受的解决方法,例如压缩它。
如果您在并行运行Windows VM并使用Apple邮件从那里通过电子邮件发送txt文件,则该错误也存在。这是电子邮件编码。在此处形成之前的评论,看起来netscape有同样的问题。
答案 4 :(得分:0)
只是说,这也是从php返回的值(种类......):
<?php var_dump(urlencode(PHP_EOL)); ?>
// Prints: string '%0D%0A' (length=6)-- used in 5.4.24 at least
答案 5 :(得分:0)
我在 Solidworks 3D CAD 程序生成的文本文件中看到过这种情况。例如,如果您将模型的方程导出到文本文件(默认名称为 equations.txt),则行尾使用 0x0D 0x0D 0x0A
。
我确定这是一个错误,但事实就是如此。
这些文件(至少是 2019 版软件生成的文件)包括
<0xEF, 0xBB, 0xBF>
UTF-8 表示的字节顺序标记作为文件开头的前导编码标记。