linux发给windows的文件,换行符从\n,变成了\r\n。请问在windows下如何解决

jlu_weige 2017-06-22 04:25:52
linux发给windows的文件,在windows下接收后,换行符从\n,变成了\r\n。请问在windows下如何解决????


最好是用代码或者系统设置解决,不用其他工具。
...全文
1541 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
啥啥也不是 2019-09-20
  • 打赏
  • 举报
回复
Notepad++ 选择菜单 设置 -> 点击首选项 -> 新建 -> 格式 选择 Unix 关闭 ,然后将旧的文件打开全选复制,然后新建一个文件进行黏贴,然后保存,这时就是 带有 \n 的了
赵4老师 2017-06-23
  • 打赏
  • 举报
回复
我上面的代码是将命令行给出的文件中的\r替换为\r\n UE应该可以设置换行符为\r\n或\n的。
真相重于对错 2017-06-23
  • 打赏
  • 举报
回复
我不太了解linux,所以是否有更好的解决方案,我不清楚。 一般在异构的网络上传输,要保证数据的正确性,一般不是直接传数据,而是使用base64编码,比如邮件的附件。
jlu_weige 2017-06-22
  • 打赏
  • 举报
回复
引用 5 楼 zhao4zhong1 的回复:
仅供参考:
#include <stdio.h>
FILE *f;
int c1,c2;
int main(int argc,char *argv[]) {
    if (argc!=2) {
        printf("Usage: CR2CRLF filename\n");
        return 1;
    }
    f=fopen(argv[1],"rb+");
    if (NULL==f) {
        printf("Can not open file [%s]!\n",argv[1]);
        return 2;
    }
    while (1) {
        c1=fgetc(f);
        if (EOF==c1) break;
        if ('\r'==c1) {
            c2=fgetc(f);
            if (EOF==c2) {
                fseek(f,-1L,SEEK_CUR);
                fputc('\n',f);
                break;
            }
            if ('\n'!=c2) {
                fseek(f,-2L,SEEK_CUR);
                fputc('\n',f);
                fseek(f,1,SEEK_CUR);
            }
        }
    }
    fclose(f);
    return 0;
}
试了,不好使啊!!!!
jlu_weige 2017-06-22
  • 打赏
  • 举报
回复
引用 4 楼 bravery36 的回复:
[quote=引用 3 楼 gangqin6084 的回复:] 二进制两边转换加传输太慢了。我发送的都没问题,用二进制工具比较过,就差一个换行符,linux是\n windows是\r\n,只要改掉这块就行。网上找道德方法都是在linux下改进的,我现在要在windows下改。
什么叫二进制转换,大哥,你知道什么叫二进制传输吗,还太慢了.........[/quote] 水平不太高,懂得不多
赵4老师 2017-06-22
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
FILE *f;
int c1,c2;
int main(int argc,char *argv[]) {
    if (argc!=2) {
        printf("Usage: CR2CRLF filename\n");
        return 1;
    }
    f=fopen(argv[1],"rb+");
    if (NULL==f) {
        printf("Can not open file [%s]!\n",argv[1]);
        return 2;
    }
    while (1) {
        c1=fgetc(f);
        if (EOF==c1) break;
        if ('\r'==c1) {
            c2=fgetc(f);
            if (EOF==c2) {
                fseek(f,-1L,SEEK_CUR);
                fputc('\n',f);
                break;
            }
            if ('\n'!=c2) {
                fseek(f,-2L,SEEK_CUR);
                fputc('\n',f);
                fseek(f,1,SEEK_CUR);
            }
        }
    }
    fclose(f);
    return 0;
}
bravery36 2017-06-22
  • 打赏
  • 举报
回复
引用 3 楼 gangqin6084 的回复:
二进制两边转换加传输太慢了。我发送的都没问题,用二进制工具比较过,就差一个换行符,linux是\n windows是\r\n,只要改掉这块就行。网上找道德方法都是在linux下改进的,我现在要在windows下改。
什么叫二进制转换,大哥,你知道什么叫二进制传输吗,还太慢了.........
jlu_weige 2017-06-22
  • 打赏
  • 举报
回复
二进制两边转换加传输太慢了。我发送的都没问题,用二进制工具比较过,就差一个换行符,linux是\n windows是\r\n,只要改掉这块就行。网上找道德方法都是在linux下改进的,我现在要在windows下改。
bravery36 2017-06-22
  • 打赏
  • 举报
回复
你确定是传输的问题而不是打开方式的问题吗?传输用binary一般不会有问题
xiaohuh421 2017-06-22
  • 打赏
  • 举报
回复
请使用二进制方式传送, 就能保持原样了

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧