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 1
为什么你会觉得文本内容会没法正常打开……
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 @walleL 牛啊,原来还有这么好的命令,简直是照妖镜啊,直接让换行符再原形了
|