![]() | 1 vibbow 2015-06-14 19:10:19 +08:00 windows: \r\n linux: \n 反正都有 \n,linux当然能正确换行了 \r 也不会破坏什么东西 Windows下取决于编辑器,你用windows自带记事本打开看看。 |
![]() | 2 haiyang416 2015-06-14 19:10:22 +08:00 via Android 你不认为你用什么工具打开也很重要么? |
3 ajianrelease OP @vibbow 用Windows自带的记事本也可以正常打开 |
![]() | 4 icylogic 2015-06-14 19:18:49 +08:00 via Android 因为 vim 可以按照 dos 模式显示的啊 |
![]() | 5 xupefei 2015-06-14 19:21:06 +08:00 |
![]() | 6 feikaras 2015-06-14 19:25:00 +08:00 再说vim支持dos格式 再说windows记事本又不支持linux换行。 |
7 ajianrelease OP @feikaras 但我实际测试结果是记事本可以正常打开ubuntu传过来的文件,我用的是win7 |
8 ajianrelease OP @xupefei 恩,我是用notepad.exe打开的,是正常的 |
![]() | 9 tonyluj 2015-06-14 20:03:22 +08:00 和编辑器有关吧,python -c 'print(repr(open("file.txt", "r").read()))',看看原始字符串 |
10 Arthur2e5 2015-06-14 20:24:15 +08:00 为什么不愿意 hexdump 一下…… 从 Ubuntu 传给 Windows 又不说明没有用 Windows 的 CRLF。 然后稍微专业一点的文本编辑器对付 CR/CRLF/LF 都能自动检测并且看懂。 |
11 ajianrelease OP @tonyluj 在Linux下是'hello,baby\r\nhehe\r\n',在Windows下是'hello,baby\nhehe\n'。两个文件的md5是相同的,但Windows下没有打印出那个\r |
![]() | 12 vibbow 2015-06-14 20:39:59 +08:00 @ajianrelease 那只能说是python有问题... |
13 endrollex 2015-06-14 20:42:12 +08:00 ASCII中的定义: 换行: LF(Line feed), '\n', 0x0A, 10 in decimal) 回车: CR(Carriage return, '\r', 0x0D, 13 in decimal) 回车+换行: (CR+LF, '\r\n', 0x0D0A) 看十六进制,ASCII定义可能有变 |
14 ajianrelease OP @Arthur2e5 哈,好办法,查看过了,文件传输前后没有修改。谢谢啦 |
15 ajianrelease OP @endrollex 好办法,感谢 |
![]() | 16 zhicheng 2015-06-14 20:54:22 +08:00 via Android 看到 md5 是一样的,后面就没必要讨论了。 |
![]() | 17 tonyluj 2015-06-14 20:59:57 +08:00 额 我测试了下,在Windows下用记事本创建 hello换行world,实际的文件是hello\nworld,12个字节,python木有问题~ |
![]() | 18 caixiexin 2015-06-14 22:38:48 +08:00 先看下编辑器有没有偷偷帮你转好了再展示? vim的话,看下右下角那个dos或者unix标记? |
![]() | 19 regeditms 2015-06-14 22:41:49 +08:00 二进制模式都似乎正常的,如果用文本模式写入就会有问题. |
![]() | 20 secondwtq 2015-06-14 22:58:14 +08:00 @vibbow 如果我没有记错的话,学校 C 语言课里面教的 fopen 第二个参数的 'b' 选项,就是 Windows 专属。 也就是说如果在 Windows 环境下,不带 'b' 选项打开一个文件(所谓“文本模式”),可能你读到的内容已经被动了手脚。 |
![]() | 21 msg7086 2015-06-15 00:18:46 +08:00 (谁告诉你不能正常打开的) |
![]() | 22 feikaras 2015-06-15 01:13:19 +08:00 @ajianrelease 问题是linux也可以保存成dos模式。自己看下编辑器。 |
![]() | 23 ryd994 2015-06-15 02:37:17 +08:00 可能是ftp分二进制模式和文本模式,文本模式下自动转换了 |
![]() | 24 withrock 2015-06-15 10:04:23 +08:00 建议都用二进制传输。有时候会遇到Windows下的文件传输到linux下后用vi打开,看到许多^M符号。只能 :%s/^M//g了 |
![]() | 25 caoyue 2015-06-15 10:42:09 +08:00 ![]() 为什么你会觉得文本内容会没法正常打开…… notepad.exe 是只能把 CRLF 识别为换行,但是不代表不能识别其他内容啊 你用 notepad.exe 打开 LF 换行的文件,只是会出现所有内容不变,但是挤在一行 |
26 ajianrelease OP @caixiexin 感谢,我用:set ff看了下,是DOS文件格式 |
27 ajianrelease OP @withrock 这个建议很好,话说又学了一招,谢谢 |
28 walleL 2015-06-15 16:52:06 +08:00 没人说用 cat -A file 看看? |
29 ajianrelease OP 2015-06-15 18:29:37 +08:00 @walleL 牛啊,原来还有这么好的命令,简直是照妖镜啊,直接让换行符再原形了 |