java gbk编码
java gbk编码
今天用印象笔记导我的一些笔记(txt的,我的系统是windows),发现标题都是txt的第一行,而且还有的是乱码。据说只有MAC下的印象笔记才有以txt文件名为标题的功能,我的心情就像我家门前的那条小河一样很难过……我决定对文本处理一下。
之所以遇到乱码问题,是因为有的txt是gbk的,有的是UTF-8的(我随手记的东西,有的是用安卓dropbox写的,有的是windows notepad写的,还有linux 下用gedit写的,所以都用的默认编码),可以说这堆破玩儿意堆得很我们那破寝室外面垃圾桶里的垃圾一样杂乱无章。所以必须能识别文本是什么编码才行。
UTF-8中文是字节的,GBK中文是2字节的(在UE下的hex模式就能看出,按ctrlh),有的UTF-8会用EF BB BF 来标明这个是UTF-8的文件,我考虑实用,用如下语句测试:
1
FileInputStream fileInputStream=new FileInputStream(file);
2
InputStreamReader inputStreamReader=new InputStreamReader(fileInputStream,GB212 );
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
4
String line =bufferedReader.readLine();
5
System. out.println(Charset. forame(GB212).newEncoder().canEncode(line));
这个是测试这段字符串的字符集,如果真是GB212就返回true,否则就是false。不信你试试,反正我是信了……
开始我就真的傻乎的用这句测试第一行,后来才意识到,如果第一行没英文呢?没办法,只好一行一行的读文本,并进行与运算,才下结论:这个文本是GBK还是UTF-8
这就完了 ?没这么简单……否则我也不会无聊得继续往下写了。前面说过有的UTF-8会用EF BB BF 来标明,这也就是为啥谷歌度娘里经常会看到有人问咋读出乱码问号了呢?因为GBK是2字节的,所以它读UTF-8的乱码通常是一些莫名其妙的文字,而UTF-8是字节读的,所以读GBK会出现一大堆问号的现象。当然英文是免遭罹难的。UTF-8编码正确,却前面多个问号正是EF BB BF搞的鬼。
于是必须想办法去掉这个多余的家伙,我自己随手写了这么段代码
1
byte[] bt=line.getBytes(UTF8);
2
if ((int)bt[0]==-17&&(int)bt[1]==-69&&(int)bt[2]==-65) {
line=line.substring(1);
4
}
没错,这三个数就是EF BB BF,还是我拿计算器算的!去年的课我是白学了……(开个玩笑,我是懒得拿草纸算)
这么弄就基本把问题解决了,接下来就看你转的文本是想要UTF-8的还是GBK的了。我是建议GBK,用起来方便,而且你的流没明确字符集时用的就是你系统默认的字符集,咱大陆肯定是GBK了。
然后就是遍历文件了,我把上面的东西整吧整吧,弄成一个方法,然后又用了下以前写的遍历文件夹的方法:
01
public static void fileList(File file) {
02
File[] files = file.listFiles();
0
if (files.length!=0) {
04
for (File f : files) {
05
if (f.isFile()) {
06
String string=f.getame();
07
string=string.substring(string.lastIndexOf(.));
08
if ((.txt)) {//我只改txt的
09
println(f.getPath());
10
}
11
}
12
else
1
fileList(f);
14
}
15
}
16
}
好了,直接都转码回来了
话说我初衷是印象笔记啊,可不是研究转码呢!这就不难了,直接把去掉后缀的文件名写在文件的第一行,用印象笔记导入文件夹就搞定啦!什么?第一行那个标题很碍眼?想导完再抹下去?这个……这个……我就不能解决了。因为印象笔记的记录都不是纯文本,我没办法用流来批量改它。当然这是我的一个笨办法,不要喷我,我还是本科生,用《围城》陆子潇的话就是“还小哩,还是小弟弟哩”……
希望大神能解决一下印象笔记导txt这个烦人的问题,话说印象笔记全世界这么多人用,为啥不提供个这功能呢?我google一堆老外都在问这个问题呢……
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 20 条评论) |
本站网友 吉林妇科医院 | 20分钟前 发表 |
GB212 );BufferedReader bufferedReader=new BufferedReader(inputStreamReader);4String line =bufferedReader.readLine();5System. out.println(Charset. forame(GB212).newEncoder().canEncode(line));这个是测试这段字符串的字符集,如果真是GB212就返回true | |
本站网友 五星电器投诉电话 | 15分钟前 发表 |
我是建议GBK,用起来方便,而且你的流没明确字符集时用的就是你系统默认的字符集,咱大陆肯定是GBK了 | |
本站网友 鸵鸟心态 | 19分钟前 发表 |
files) {05if (f.isFile()) {06String string=f.getame();07string=string.substring(string.lastIndexOf(.));08if ((.txt)) {//我只改txt的09println(f.getPath());10}11}12else1fileList(f);14}15}16}好了,直接都转码回来了话说我初衷是印象笔记啊,可不是研究转码呢!这就不难了,直接把去掉后缀的文件名写在文件的第一行,用印象笔记导入文件夹就搞定啦!什么?第一行那个标题很碍眼?想导完再抹下去?这个……这个……我就不能解决了 | |
本站网友 win7瘦身 | 14分钟前 发表 |
之所以遇到乱码问题,是因为有的txt是gbk的,有的是UTF-8的(我随手记的东西,有的是用安卓dropbox写的,有的是windows notepad写的,还有linux 下用gedit写的,所以都用的默认编码),可以说这堆破玩儿意堆得很我们那破寝室外面垃圾桶里的垃圾一样杂乱无章 | |
本站网友 office办公软件是什么 | 4分钟前 发表 |
因为印象笔记的记录都不是纯文本,我没办法用流来批量改它 | |
本站网友 rho | 27分钟前 发表 |
我自己随手写了这么段代码1byte[] bt=line.getBytes(UTF8);2if ((int)bt[0]==-17&&(int)bt[1]==-69&&(int)bt[2]==-65) {line=line.substring(1);4}没错,这三个数就是EF BB BF,还是我拿计算器算的!去年的课我是白学了……(开个玩笑,我是懒得拿草纸算)这么弄就基本把问题解决了,接下来就看你转的文本是想要UTF-8的还是GBK的了 | |
本站网友 高桥二手房出售 | 30分钟前 发表 |
UTF-8编码正确,却前面多个问号正是EF BB BF搞的鬼 | |
本站网友 靖江法院 | 18分钟前 发表 |
之所以遇到乱码问题,是因为有的txt是gbk的,有的是UTF-8的(我随手记的东西,有的是用安卓dropbox写的,有的是windows notepad写的,还有linux 下用gedit写的,所以都用的默认编码),可以说这堆破玩儿意堆得很我们那破寝室外面垃圾桶里的垃圾一样杂乱无章 | |
本站网友 兰州新房出售信息 | 22分钟前 发表 |
UTF-8中文是字节的,GBK中文是2字节的(在UE下的hex模式就能看出,按ctrlh),有的UTF-8会用EF BB BF 来标明这个是UTF-8的文件,我考虑实用,用如下语句测试:1FileInputStream fileInputStream=new FileInputStream(file);2InputStreamReader inputStreamReader=new InputStreamReader(fileInputStream | |
本站网友 易善复 | 4分钟前 发表 |
java gbk编码 今天用印象笔记导我的一些笔记(txt的,我的系统是windows),发现标题都是txt的第一行,而且还有的是乱码 | |
本站网友 中国银行吉林市分行 | 8分钟前 发表 |
于是必须想办法去掉这个多余的家伙 | |
本站网友 什么孕妇奶粉好 | 8分钟前 发表 |
于是必须想办法去掉这个多余的家伙 | |
本站网友 春日野穹 | 18分钟前 发表 |
当然英文是免遭罹难的 | |
本站网友 高浓度氯化钾 | 22分钟前 发表 |
据说只有MAC下的印象笔记才有以txt文件名为标题的功能,我的心情就像我家门前的那条小河一样很难过……我决定对文本处理一下 | |
本站网友 结石的症状 | 10分钟前 发表 |
然后就是遍历文件了,我把上面的东西整吧整吧,弄成一个方法,然后又用了下以前写的遍历文件夹的方法:01public static void fileList(File file) {02File[] files = file.listFiles();0if (files.length!=0) {04for (File f | |
本站网友 捷汇网 | 4分钟前 发表 |
files) {05if (f.isFile()) {06String string=f.getame();07string=string.substring(string.lastIndexOf(.));08if ((.txt)) {//我只改txt的09println(f.getPath());10}11}12else1fileList(f);14}15}16}好了,直接都转码回来了话说我初衷是印象笔记啊,可不是研究转码呢!这就不难了,直接把去掉后缀的文件名写在文件的第一行,用印象笔记导入文件夹就搞定啦!什么?第一行那个标题很碍眼?想导完再抹下去?这个……这个……我就不能解决了 | |
本站网友 东方城乡报 | 25分钟前 发表 |
UTF-8中文是字节的,GBK中文是2字节的(在UE下的hex模式就能看出,按ctrlh),有的UTF-8会用EF BB BF 来标明这个是UTF-8的文件,我考虑实用,用如下语句测试:1FileInputStream fileInputStream=new FileInputStream(file);2InputStreamReader inputStreamReader=new InputStreamReader(fileInputStream | |
本站网友 天猫总裁 | 22分钟前 发表 |
files) {05if (f.isFile()) {06String string=f.getame();07string=string.substring(string.lastIndexOf(.));08if ((.txt)) {//我只改txt的09println(f.getPath());10}11}12else1fileList(f);14}15}16}好了,直接都转码回来了话说我初衷是印象笔记啊,可不是研究转码呢!这就不难了,直接把去掉后缀的文件名写在文件的第一行,用印象笔记导入文件夹就搞定啦!什么?第一行那个标题很碍眼?想导完再抹下去?这个……这个……我就不能解决了 | |
本站网友 沈大教务 | 12分钟前 发表 |
我自己随手写了这么段代码1byte[] bt=line.getBytes(UTF8);2if ((int)bt[0]==-17&&(int)bt[1]==-69&&(int)bt[2]==-65) {line=line.substring(1);4}没错,这三个数就是EF BB BF,还是我拿计算器算的!去年的课我是白学了……(开个玩笑,我是懒得拿草纸算)这么弄就基本把问题解决了,接下来就看你转的文本是想要UTF-8的还是GBK的了 |