masterJ2SE篇002——Windows与Linux回车换行的转换
2016-10-27 16:01
260 查看
通常说的回车换行在不同系统中是不一样的,回车对应的Unicode是\u000d,换行对应的Unicode是\u000a
Linux 每行是以
换行 来结尾的,即\n
Windows 每行是以
回车换行 来结尾的,即\r\n
Mac 每行是以 回车 来结尾的,即\r
这样就导致了一些问题,标准的Linux和Mac系统的文件,在Windows里是只有一行的,而Windows系统的文件,在Linux里,每行最后会多出一个^M,这里的^M是需要Ctrl+V,Ctrl+M打出来的
我们既然知道了回车换行的本源,可以写一个小程序来将Windows文件转化为Linux文件,也可以将Linux文件转化为Windows文件。
首先,拿到文件,按行读取,那么Java按行读取的标准是什么?\n还是\r\n,其实看了源代码就可以发现,Java按行读取是遇到换行符就会把之前读取到的返回,我们是不知道他到底读取到了\n还是\r\n,因为它把\n和\r\n都当做一个换行符了。
那现在就好办了
去掉^M:就是把读取到的内容,一个一个字符的处理,转化为Unicode,如果是\u000d或者\u000a就删掉,否则留下这个字符,最后在末尾加上\n,这样做可以把全部的^M都去掉
加上^M:就是把读取到的内容,一个一个字符的处理,转化为Unicode,如果是\u000d或者\u000a就删掉,否则留下这个字符,最后在末尾加上\r\n
下面给出将字符串转换为Unicode的代码。
[/code]
另外,我们在Linux环境中可以直接通过Shell去掉^M
sed 's/^M//g' a.txt > b.txt
Linux 每行是以
换行 来结尾的,即\n
Windows 每行是以
回车换行 来结尾的,即\r\n
Mac 每行是以 回车 来结尾的,即\r
这样就导致了一些问题,标准的Linux和Mac系统的文件,在Windows里是只有一行的,而Windows系统的文件,在Linux里,每行最后会多出一个^M,这里的^M是需要Ctrl+V,Ctrl+M打出来的
我们既然知道了回车换行的本源,可以写一个小程序来将Windows文件转化为Linux文件,也可以将Linux文件转化为Windows文件。
首先,拿到文件,按行读取,那么Java按行读取的标准是什么?\n还是\r\n,其实看了源代码就可以发现,Java按行读取是遇到换行符就会把之前读取到的返回,我们是不知道他到底读取到了\n还是\r\n,因为它把\n和\r\n都当做一个换行符了。
那现在就好办了
去掉^M:就是把读取到的内容,一个一个字符的处理,转化为Unicode,如果是\u000d或者\u000a就删掉,否则留下这个字符,最后在末尾加上\n,这样做可以把全部的^M都去掉
加上^M:就是把读取到的内容,一个一个字符的处理,转化为Unicode,如果是\u000d或者\u000a就删掉,否则留下这个字符,最后在末尾加上\r\n
下面给出将字符串转换为Unicode的代码。
public static String removeJianMByUnicode1(String str){
if(str==null||str.equals("")){
return str;
}
String tmp1;
String tmp2;
StringBuffer sb = new StringBuffer();
char c;
int i, j,k;
for (i = 0; i < str.length(); i++) {
c = str.charAt(i);
j = (c >>> 8); // 取出高8位
tmp1 = Integer.toHexString(j);
k = (c & 0xFF); // 取出低8位
tmp2 = Integer.toHexString(k);
if ((tmp1+tmp2).equals("0a")){
continue;
}
if ((tmp1+tmp2).equals("0d")){
continue;
}
sb.append(c);
}
//以下两种方式都OK
//方式一
char c0 = 10;
sb.append(c0);
//方式二
sb.append("\n");
return sb.toString();
}
[/code]
另外,我们在Linux环境中可以直接通过Shell去掉^M
sed 's/^M//g' a.txt > b.txt
相关文章推荐
- Linux、windows下回车换行格式转换 回车换行结尾转换
- 关于linux和windows的CR, LF, CR/LF 回车 换行问题
- Linux系统与Windows系统中的回车与换行问题
- Linux和windows、Mac回车换行区别
- 关于linux和windows的CR, LF, CR/LF 回车 换行问题
- Linux/Windows/Mac OS中的回车与换行
- LINUX/UNIX下的回车换行与WINDOWS下的区别
- Windows & Unix 文件格式之迷, 空格、回车换行、tab 转换及其相关工具
- 回车和换行在windows和linux下的区别
- Windows & Unix 文件格式之迷, 空格、回车换行、tab 转换及其相关工具(转载)
- windows与linux下回车与换行
- Windows与Linux中的回车换行
- Linux系统与Windows系统中的回车与换行问题
- windows 和linux 回车符号转换问题
- Windows & Unix 文件格式之迷, 空格、回车换行、tab 转换及其相关工具 .
- shell脚本兼容linux/unix与windows/cygwin的基础(注意处理好CR, LF, CR/LF 回车 换行的问题)
- LINUX/UNIX下的回车换行与WINDOWS下的区别
- windows换行和linux换行的转换
- 随手记, C回车换行,0x0d 0x0a,WINDOWS下fgetc()一次读入,即\n,LINUX下fgetc()需要分两次读入0x0d, 0x0a
- 转:LINUX/UNIX下的回车换行与WINDOWS下的区别