vs行尾不一致,是否将行尾标准化的问题
文章目录
- 现象
- 产生的原因分析
- 直接原因
- 根本原因
- 解决办法:
现象
在打开vs的工程文件的时候,刚打开就出现下面的对话框,这是什么原因?是/否?
产生的原因分析
直接原因
你的程序中有一部分是从网页上或其他地方拷贝来的,不是自己在vs上写的。一般从网站上直接拷贝代码会碰到这种问题,可能是代码里有中文的空格,或者看似空格,其实是一些乱七八糟的字符的原因。
查看你当前的vs文件的源代码。
https://www.cnblogs.com/smallidea/p/5501014.html
这位作者是如何做到的?直接借用他的图吧。
通过读取源文件,发现换行都使用的是“\n”。
根本原因
这是由Windows和Unix不同的标准引起的…即“回车”和“换行”的问题。“回车”和“换行”是ASCII字符集中两个不可见的控制符。
符号 | ASCII码 | 意义 |
---|---|---|
\n | 10 | 换行NL |
\r | 13 | 回车CR |
回车和换行的来源
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。到了GUI时代光标都是自由移动的不再有回车的意义。
后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。
在Windows中:
‘\r’ 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖;
‘\n’ 换行,换到当前位置的下一行,而不会回到行首;
前面组合在一起才是我们通常希望的换行,Windows 中的换行符"\r\n";
关于这一点,存疑的地方在于我们用C/C++写代码的时候,都是用\n作为换行符的,也是换到下一行的行首,难道是因为下一行本来就是空的?可以用文件写入的方式试试。以后有机会了试验后再补充。
为了验证windows下的回车效果,在win7的vs2015下做如下验证:
#include <iostream>
using namespace std;
int main()
{cout << "this is the first line\n";cout << "this is the second line123\r";cout << "this is the third line\n";cout << "this is the fouth line\r";cout << "this is the fifth line\n";cout << "this is the sixth line\r\n";cout << "this is the seventh line\n";cout << "end";system("pause");return 0;
}
输出结果为:
Unix系统中:
每行结尾只有“<换行>”,即"\n";Windows系统里面,每行结尾是“<回车><换行>”,即“\r\n”;Mac系统里,每行结尾是“<回车>”,即"\r";。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
Linux中遇到换行符("\n")会进行回车+换行的操作,回车符反而只会作为控制字符("^M")显示,不发生回车的操作。而windows中要回车符+换行符("\r\n")才会回车+换行,缺少一个控制符或者顺序不对都不能正确的另起一行。
所以基于Windows开发标准的文本编辑器Visual Studio才会提醒你当前编辑的文本不符合Windows行尾标准。
1.Windows 中的换行符"\r\n"
2.Unix/Linux 平台换行符是 "\n"。
3.MessageBox.Show() 的换行符为 "\n"
4.Console 的换行符为 "\n"
换行符还因平台差异而不同。
解决办法:
1.去掉去行尾的检查,或者修改行尾的内容为统一的一种。
2.如果出现乱码可能是因为编码的问题,可以启用UTF-8的检测,在工具->选项->文本编辑器->自动检测不带签名的UTF-8编码,勾选
3.把行尾格式化一下:把文件的内容全部复制到记事本或者文本编码工具中,然后再复制到vs.net里。这样就可以全部格式化行尾的格式了。
4.VSS版本太低 VS.net绑定到VSS 要求VSS的版本在6.0C以上的版本。如果VSS的版本是6.0C以下的版本就可能出现这种情况,建议升级VSS到6.0d的版本。即可解决该问题。
下面是原作者的解决方案,我目前还看不懂,等能看懂了再来看,先记录下来。
- 为保持平台的通用性,可以用系统默认换行符System.Environment.NewLine。
- 替换所有的非标准换行符。
class Program_Utf8{static void Main(string[] args){String folderPath = @"E:\文件夹路径\";ParseDirectory(folderPath, "*.cs", (filePath) =>{string text = "";using (StreamReader read = new StreamReader(filePath, Encoding.Default)){string oldtext = read.ReadToEnd();text = oldtext;text = text.Replace("\n", "\r\n");text = text.Replace("\r\r\n", "\r\n"); // 防止替换了正常的换行符 if (oldtext.Length == text.Length){Console.WriteLine(filePath.Substring(filePath.LastIndexOf("\\") + 1) + " 不需要标准化");return; // 如果没有变化就退出 }}File.WriteAllText(filePath, text, Encoding.UTF8); //utf-8格式保存,防止乱码Console.WriteLine(filePath.Substring(filePath.LastIndexOf("\\") + 1) + " 行尾标准化完成");});Console.ReadKey();}/// <summary>递归所有的目录,根据过滤器找到文件,并使用委托来统一处理</summary>/// <param name="info"></param>/// <param name="filter"></param>/// <param name="action"></param>static void ParseDirectory(string folderPath, string filter, Action<string> action){if (string.IsNullOrWhiteSpace(folderPath)|| folderPath.EndsWith("debug", StringComparison.OrdinalIgnoreCase)|| folderPath.EndsWith("obj", StringComparison.OrdinalIgnoreCase)|| folderPath.EndsWith("bin", StringComparison.OrdinalIgnoreCase))return;Console.WriteLine("读取目录:" + folderPath);// 处理文件string[] fileNameArray = Directory.GetFiles(folderPath, filter);if (fileNameArray.Length > 0){foreach (var filePath in fileNameArray){action(filePath);}}else{Console.WriteLine("未发现文件!");}Console.WriteLine("====================================");//得到子目录,递归处理string[] dirs = Directory.GetDirectories(folderPath);var iter = dirs.GetEnumerator();while (iter.MoveNext()){string str = (string)(iter.Current);ParseDirectory(str, filter, action);}}}View Code
感谢原文2位原作者。
本文来源于参考:
https://blog.csdn.net/xiaofei2010/article/details/8458605
和
https://www.cnblogs.com/smallidea/p/5501014.html
vs行尾不一致,是否将行尾标准化的问题相关推荐
- 解决vs.netIDE报以下文件中的行尾不一致,要将行尾标准化吗?的提示
今天也发现了这个问题,之前没有去注意,但发现每次同事签入代码或者我签入后就会发现多了一些空行,而且大部分是在注释里的. 如 /// <summary> /// 设置计时器的状态 /// & ...
- C/C++字符串操作之head头指针和end尾指针相向而行demo
#include "stdlib.h" #include "stdio.h" #include "string.h"/* * head头指针 ...
- Python pandas在读取csv文件时(linux与windows之间传输),数据行数不一致的问题
背景 最近在处理用户评论数据时,从Linux服务器上面用pandas导出的csv文件,下载到自己的Windows电脑,再用本地pandas读取时发现数据行数不一致的情况,比如在Linux服务器上面数据 ...
- Navicat:显示的行数与表中实际的行数不一致
文章目录 1 Navicat 显示的行数 2 实际的行数 3 原因 1 Navicat 显示的行数 2 实际的行数 SELECTCOUNT(*) FROMtable1 3 原因 MySQL 在当前连接 ...
- python列表中删除奇数行_shell 删除奇数偶数行
今天总结一个正则的东西匹配和替换的删除奇数行和偶数行来理解模式空间以及模式空间是如何保存.标记数据的 删除偶数行: %s/\(^.*$\)\n^.*$/\1/g 删除奇数行: %s/^.*$\n\(^ ...
- python 与或非_Python |Python 从入门到精通(放弃)之注释、行与缩进、多行语句...
PYTHON 本期主要讲"注释"."行与缩进"."多行语句" 入门常识:敲代码必须用英文键盘,里面的各种标点符号都是英文类型的,否则会报错. ...
- 怎么判断第几范式例题_2021国家公务员考试行测题库:行测逻辑判断模拟题
点击箭头处"蓝色字",关注我们哦!! 2021国家公务员考试行测题库:行测逻辑判断模拟题 1.你若不离不弃,我便生死相依 问:如果上述陈述为真,则下列哪项必定为真? A.如果你离开 ...
- 把三千行代码重构为15行
2019独角兽企业重金招聘Python工程师标准>>> 如果你认为这是一个标题党,那么我真诚的恳请你耐心的把文章的第一部分读完,然后再下结论.如果你认为能够戳中您的G点,那么请随手点 ...
- linux 命令行 过滤,利用linux命令行工具进行文本行过滤
在日常工作中会遇到需要筛选过滤要查看的日志等文本文件的任务,例如需要查看日志文件的最后几行等. 下面总结一下常见的对文本行过滤的方法. 常用命令行工具 接下来主要使用的是head,tail,sed和a ...
- R语言dataframe创建新的特征(变量)、行加和特征、行均值特征(基于加减乘除、指数、模数等操作符)、创建新的特征(变量)、生成编码特征(基于比较操作符、逻辑操作符)
R语言dataframe创建新的特征(变量).行加和特征.行均值特征(基于加减乘除.指数.模数等操作符).为dataframe创建新的特征(变量).生成编码特征(基于比较操作符.逻辑操作符) 目录
最新文章
- 幽门螺杆菌感染会增加代谢综合征和糖尿病风险,竟然“男女有别”?
- 编译原理之词法分析、语法分析、语义分析,【精炼总结】
- 使用MyBatis集成阿里巴巴druid连接池(不使用spring)
- 微课|玩转Python轻松过二级(1.3节):编码规范与代码优化建议1
- 一文搞懂C++强制类型转换
- linux的文件权限分析
- 自己mini版jquery编写
- 利用Jwing窗口写程序-----简单计算器(JAVA实用教程2-第五版 第九章 编程题 三(2)小题)
- 微信小程序 实时音视频通话
- 设计模式-外观模式(家庭影院你值得拥有)
- 4.1.8 OS之文件保护(口令保护、加密保护、访问控制)
- linux下bluetooth编程(一)基础概念
- Flink的检查点(checkpoint)
- 超全!嵌入式系统词汇速查表
- split-horizon产生的路由欺骗
- 【蓝桥杯】历届试题 对局匹配(C++)
- Python实现86五笔反查代码
- Python超市管理系统毕业设计源码111042
- 蓝桥杯单片机led指示
- windows linux 使用usb | WiFi连接手机摄像头
热门文章
- C# 之 扑克游戏 -- 21点规则介绍和代码实现
- 高效率完成工作的12种热门编程语言,你会用几个?
- 基本的信号——冲激信号与冲激序列
- [book]《心流:最优体验心理学》
- kass中lisp文件_Lisp之文件操作
- 复制粘贴Excel文件后,显示“安全警告 宏已被禁用”,复制后得到的文件看不到内容
- GVM(openVAS)中scan configs为空的问题解决
- Unity3D研究院之在MAC上脚本XlsxWriter写入Excel .xlsx格式
- 基于YOLOv3的车辆号牌定位
- 【数据分析与挖掘(一)】笔试题汇总(附答案)