java gbk编码_java GBK UTF-8编码与自动识别与统一(乱码问题)
今天用印象笔记导我的一些笔记(txt的,我的系统是windows),发现标题都是txt的第一行,而且还有的是乱码。据说只有MAC下的印象笔记才有以txt文件名为标题的功能,我的心情就像我家门前的那条小河一样很难过……我决定对文本处理一下。
之所以遇到乱码问题,是因为有的txt是gbk的,有的是UTF-8的(我随手记的东西,有的是用安卓dropbox写的,有的是windows notepad写的,还有linux 下用gedit写的,所以都用的默认编码),可以说这堆破玩儿意堆得很我们那破寝室外面垃圾桶里的垃圾一样杂乱无章。所以必须能识别文本是什么编码才行。
UTF-8中文是3字节的,GBK中文是2字节的(在UE下的hex模式就能看出,按ctrl+h),有的UTF-8会用EF BB BF 来标明这个是UTF-8的文件,我考虑实用,用如下语句测试:
1
FileInputStream fileInputStream=new FileInputStream(file);
2
InputStreamReader inputStreamReader=new InputStreamReader(fileInputStream,"GB2312" );
3
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
4
String line =bufferedReader.readLine();
5
System. out.println(java.nio.charset.Charset. forName("GB2312").newEncoder().canEncode(line));
这个是测试这段字符串的字符集,如果真是GB2312就返回true,否则就是false。不信你试试,反正我是信了……
开始我就真的傻乎的用这句测试第一行,后来才意识到,如果第一行没英文呢?没办法,只好一行一行的读文本,并进行与运算,才下结论:这个文本是GBK还是UTF-8
这就完了 ?没这么简单……否则我也不会无聊得继续往下写了。前面说过有的UTF-8会用EF BB BF 来标明,这也就是为啥谷歌度娘里经常会看到有人问咋读出乱码问号了呢?因为GBK是2字节的,所以它读UTF-8的乱码通常是一些莫名其妙的文字,而UTF-8是3字节读的,所以读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) {
3
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();
03
if (files.length!=0) {
04
for (File f : files) {
05
if (f.isFile()) {
06
String string=f.getName();
07
string=string.substring(string.lastIndexOf("."));
08
if (string.equals(".txt")) {//我只改txt的
09
System.out.println(f.getPath());
10
}
11
}
12
else
13
fileList(f);
14
}
15
}
16
}
好了,直接都转码回来了
话说我初衷是印象笔记啊,可不是研究转码呢!这就不难了,直接把去掉后缀的文件名写在文件的第一行,用印象笔记导入文件夹就搞定啦!什么?第一行那个标题很碍眼?想导完再抹下去?这个……这个……我就不能解决了。因为印象笔记的记录都不是纯文本,我没办法用流来批量改它。当然这是我的一个笨办法,不要喷我,我还是本科生,用《围城》陆子潇的话就是“还小哩,还是小弟弟哩”……
希望大神能解决一下印象笔记导txt这个烦人的问题,话说印象笔记全世界这么多人用,为啥不提供个这功能呢?我google一堆老外都在问这个问题呢……
java gbk编码_java GBK UTF-8编码与自动识别与统一(乱码问题)相关推荐
- java 统一编码_java GBK UTF-8编码与自动识别与统一(乱码问题)
今天用印象笔记导个人一些笔记(txt的,个人系统是windows),发现标题都是txt的第一行,并且还有的是乱码.听说只有MAC下的印象笔记才有以txt文件名为标题的功能,个人心情就像我家门前的那条小 ...
- java 数据库 编码_Java 连接数据库及字符编码
通过JDBC方式连接MYSQL数据库: public static Connection getConnection(){ String username="root" ; Str ...
- java获取字符的编码_java获取文本文件字符编码的方法
java获取文本文件字符编码的方法 发布时间:2020-06-16 09:56:08 来源:亿速云 阅读:386 作者:Leah 这篇文章将为大家详细讲解有关java获取文本文件字符编码的方法,小编觉 ...
- java emoji 编码_Java对Emoji表情编码与解码
Java对Emoji表情编码与解码,使用到Java Emoji Converter . GitHub地址:https://github.com/binarywang/java-emoji-conver ...
- java 网页编码_JAVA如何判断网页编码
前言 最近做一个搜索项目,需要爬取很多网站获取需要的信息.在爬取网页的时候,需要获得该网页的编码,不然的话会发现爬取下来的网页有很多都是乱码. 分析 一般情况下,网页头信息会指定编码,可以解析head ...
- java解压_Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)
JDK中自带的ZipOutputStream在压缩文件时,如果文件名中有中文,则压缩后的 zip文件打开时发现中文文件名变成乱码. 解决的方法是使用apache-ant-zip.jar包(见附件)中的 ...
- java sql编码_java+sql 编码 UTF-8、ISO-8859-1、GBK
java 编码 UTF-8.ISO-8859-1.GBK Java支持UTF-8.ISO-8859-1.GBK等各种字体编码,可笔者发现Java中字体编码的问题仍难倒了不少程序员,网上虽然也有不少关于 ...
- java中unicode显示乱码_Java 已知Java系统编码是GBK,jtextarea从一编码为Unicode的文本中读取数据,出现乱码,怎么正常显示?...
Java 已知Java系统编码是GBK,jtextarea从一编码为Unicode的文本中读取数据,出现乱码,怎么正常显示? 关注:159 答案:2 mip版 解决时间 2021-02-03 12 ...
- java文件全是数字编码_批量将Java源代码文件的编码从GBK转为UTF-8
最近在做一个项目,需要从以前的另外一个项目迁移大量源代码过来,但是由于另一个项目采用GBK编码格式,而新项目采用的UTF-8编码格式,如果直接把Java源代码复制到Eclipse中所有的中文信息都出现 ...
最新文章
- 智能优化算法之蚁群算法(1)
- matlab 数字转化为文字,将文本转换为数值
- MATLAB Simulink
- MathWorks 中国
- Hudson-ci/Installing Hudson Windows Service---官方文档
- git clone -b master https://github.com/hyperledger/fabric-samples.git
- ubuntu MySQL安装指南
- Linux 常用命令
- ALSA声卡驱动二之声卡的创建
- 学计算机的制作水印,如何设置属于自己的水印,电脑上制作属于自己的文字水印...
- 编译警告:backslash and newline separated by space
- python if any_python条件判断 all(),any()
- 四季电台应用项目源码
- 合并Windows系统镜像教程
- java8新特性回顾(四)---并发增强之Striped64和longAdder
- 如何用随机森林算法,在深海养肥一群鱼
- pygame的简介与安装
- 微信小程序开发之大转盘 抽奖
- 自动驾驶 Apollo 源码分析系列,系统监控篇(二):Monitor模块如何监控硬件
- 人工智能工程师学习路线/自然语言处理算法工程师
- html调用手机NFC,如何使用手机上NFC的功能
- Hive HWI 安装及配置
热门文章
- 区块链会议_重构世界·2018区块链新经济杭州峰会_20181119
- java非法字符uff09_新手求助。
- python中为程序添加小图标的方法
- 乐橙java教学_TestShipin 网络摄像头通过大华乐橙云平台实 页实时监控 Java Develop 262万源代码下载- www.pudn.com...
- Ansible(自动化软件)
- python选环境是什么意思_Eclipse安装Python环境,安装环境是什么意思,前置条件:安装Ecl...
- 使用支付宝沙盒 nodejs
- excel表格里的文字怎么换行_Excel表格VBA知识,文字框的常用属性,文本框录入数据必学...
- 用matlab代码进行数据探索、数据清洗学习笔记
- PPT文件打开的时候需要输入密码才能编辑?