java 统一编码_java GBK UTF-8编码与自动识别与统一(乱码问题)
今天用印象笔记导个人一些笔记(txt的,个人系统是windows),发现标题都是txt的第一行,并且还有的是乱码。听说只有MAC下的印象笔记才有以txt文件名为标题的功能,个人心情就像我家门前的那条小河同样很难过……我决定对文本处理一下。
java
之因此遇到乱码问题,是由于有的txt是gbk的,有的是UTF-8的(我随手记的东西,有的是用安卓dropbox写的,有的是windows notepad写的,还有linux 下用gedit写的,因此都用的默认编码),能够说这堆破玩儿意堆得很咱们那破寝室外面垃圾桶里的垃圾同样杂乱无章。因此必须能识别文本是什么编码才行。
linux
UTF-8中文是3字节的,GBK中文是2字节的(在UE下的hex模式就能看出,按ctrl+h),有的UTF-8会用EF BB BF 来标明这个是UTF-8的文件,我考虑实用,用以下语句测试:windows
FileInputStream fileInputStream= new FileInputStream(file);
InputStreamReader inputStreamReader= new InputStreamReader(fileInputStream,"GB2312" );
BufferedReader bufferedReader= new BufferedReader(inputStreamReader);
String line =bufferedReader.readLine();
System. out.println(java.nio.charset.Charset. forName( "GB2312").newEncoder().canEncode(line));
这个是测试这段字符串的字符集,若是真是GB2312就返回true,不然就是false。不信你试试,反正我是信了……测试
开始我就真的傻乎的用这句测试第一行,后来才意识到,若是第一行没英文呢?没办法,只好一行一行的读文本,并进行与运算,才下结论:这个文本是GBK仍是UTF-8google
这就完了 ?没这么简单……不然我也不会无聊得继续往下写了。前面说过有的UTF-8会用EF BB BF 来标明,这也就是为啥谷歌度娘里常常会看到有人问咋读出乱码问号了呢?由于GBK是2字节的,因此它读UTF-8的乱码一般是一些莫名其妙的文字,而UTF-8是3字节读的,因此读GBK会出现一大堆问号的现象。固然英文是免遭罹难的。UTF-8编码正确,却前面多个问号正是EF BB BF搞的鬼。编码
因而必须想办法去掉这个"多余"的家伙,我本身随手写了这么段代码spa
byte[] bt=line.getBytes("UTF8");
if ((int)bt[0]==-17&&(int)bt[1]==-69&&(int)bt[2]==-65) {
line=line.substring(1);
}
没错,这三个数就是EF BB BF,仍是我拿计算器算的!去年的课我是白学了……(开个玩笑,我是懒得拿草纸算)code
这么弄就基本把问题解决了,接下来就看你转的文本是想要UTF-8的仍是GBK的了。我是建议GBK,用起来方便,并且你的流没明确字符集时用的就是你系统默认的字符集,咱大陆确定是GBK了。字符串
而后就是遍历文件了,我把上面的东西整吧整吧,弄成一个方法,而后又用了下之前写的遍历文件夹的方法:get
public static void fileList(File file) {
File[] files = file.listFiles();
if (files.length!=0) {
for (File f : files) {
if (f.isFile()) {
String string=f.getName();
string=string.substring(string.lastIndexOf("."));
if (string.equals(".txt")) {//我只改txt的
System.out.println(f.getPath());
}
}
else
fileList(f);
}
}
}
好了,直接都转码回来了
话说我初衷是印象笔记啊,可不是研究转码呢!这就不难了,直接把去掉后缀的文件名写在文件的第一行,用印象笔记导入文件夹就搞定啦!什么?第一行那个标题很碍眼?想导完再抹下去?这个……这个……我就不能解决了。由于印象笔记的记录都不是纯文本,我没办法用流来批量改它。固然这是个人一个笨办法,不要喷我,我仍是本科生,用《围城》陆子潇的话就是“还小哩,仍是小弟弟哩”……
但愿大神能解决一下印象笔记导txt这个烦人的问题,话说印象笔记全世界这么多人用,为啥不提供个这功能呢?我google一堆老外都在问这个问题呢……
java 统一编码_java GBK UTF-8编码与自动识别与统一(乱码问题)相关推荐
- java 数据库 编码_Java 连接数据库及字符编码
通过JDBC方式连接MYSQL数据库: public static Connection getConnection(){ String username="root" ; Str ...
- java gbk编码_java GBK UTF-8编码与自动识别与统一(乱码问题)
今天用印象笔记导我的一些笔记(txt的,我的系统是windows),发现标题都是txt的第一行,而且还有的是乱码.据说只有MAC下的印象笔记才有以txt文件名为标题的功能,我的心情就像我家门前的那条小 ...
- 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 gbk转机内码_Java实现的UTF-8,GBK,Unicode编码相互转换的代码
java实现UTF-8,GBK,Unicode编码相互转换,代码如下: public class UTF2GBK { public String gbk2utf8(String gbk) { Stri ...
- python初级6(九九乘法表,二进制,ASCII编码,GBK,unicode,utf-8)
九九乘法表 for i in range(1,10):for j in range(1,i+1):print(f"{i}*{j} == {i*j}",end=" &quo ...
- python编码规范总结、python编码转换
python编码规范总结.python编码转换 所有的 Python 脚本文件都应在文件头标上 #-*- coding:utf8 -*- .设置编辑器,默认保存为 utf8 格式. 编码 Python ...
最新文章
- 云起作者微博认证在哪_UZI的期待实现了!厂长改认证明示复出,将再现“猪狗大战”荣光...
- LeetCode 2 两数相加
- Kotlin学习与实践 (十)Kotlin的可空性
- SpringBoot事件与监听机制
- 如果测试没有梦想,那跟咸鱼有什么区别?
- 【大师分享】人工智能始发力,医学影像更清晰
- java后台代码添加超链接_Java 添加超链接至Excel文档
- 数据说大数据分析师吴女士观点:大数据是回暖的计算机行业中绩增速最高的子行业...
- mysql mariadb 10.4_MariaDB 10.4.1发布,流行的MySQL分支版本
- 学弟拿到了大厂推荐算法岗offer,分享一波他的经验
- Allwinner Tina Linux 如何打开ssh远程登录支持
- 【计组】超标量、超级流水线、超长指令字区别详解
- 【科研技巧】在绘图软件中如何插入数学公式,比如Processon、Visio、draw.io
- BASH脚本基础:环境变量PS1配色方法
- 模拟电路设计(23)---模数和数模转换器概述
- 在线教育数据分析实战项目案例
- 文件上传upload-labs靶场通关指南
- 个人居间服务,劳务费用怎样合理节税?自然人代开3个点
- 【教程】layui数据表格添加下拉菜单
- 网络安全基础之DNS与DHCP