一、认识字符编码:
1、Java中String的默认编码为UTF-8,可以使用以下语句获取:Charset.defaultCharset();
2、Windows操作系统下,文本文件的默认编码为ANSI,对中文Windows来说即为GBK。例如我们使用记事本程序新建一个文本文档,其默认字符编码即为ANSI。
3、Text文本文档有四种编码选项:ANSI、Unicode(含Unicode Big Endian和Unicode Little Endian)、UTF-8、UTF-16
4、因此我们读取txt文件可能有时候并不知道其编码格式,所以需要用程序动态判断获取txt文件编码。
例如,Unicode文档以0xFFFE开头,用程序取出前几个字节并进行判断即可。
5、Java编码与Text文本编码对应关系:
Java中的编码字符串 | Text编码 | 字节标志 |
GBK | ANSI |
无格式定义 |
UTF-8 | UTF-8包含两种规格: UTF-8 UTF-8-BOM |
需判断前三个字节: 前三个字节为:0xE59B9E 前三个字节为:0xEFBBBF |
UTF-16 | UTF-16 | 前两个字节为:0xFEFF |
UNICODE | Unicode包含两种规格: 1、UCS2 Little Endian 2、UCS2 Big Endian |
前两个字节为:0xFFFE |
Java读取Text文件,如果编码格式不匹配,就会出现乱码现象。所以读取文本文件的时候需要设置正确字符编码。Text文档编码格式都是写在文件头的,在程序中需要先解析文件的编码格式,获得编码格式后,再以此格式读取文件就不会产生乱码了。
二、举个例子:
有一个文本文件:test.txt
测试代码:
/**
* 文件名:CharsetCodeTest.java
* 功能描述:文件字符编码测试
*/
import java.io.*;
public class CharsetCodeTest {
public static void main(String[] args) throws Exception {
String filePath = "test.txt";
String content = readTxt(filePath);
System.out.println(content);
}
public static String readTxt(String path) {
StringBuilder content = new StringBuilder("");
try {
String fileCharsetName = getFileCharsetName(path);
System.out.println("文件的编码格式为:"+fileCharsetName);
InputStream is = new FileInputStream(path);
InputStreamReader isr = new InputStreamReader(is, fileCharsetName);
BufferedReader br = new BufferedReader(isr);
String str = "";
boolean isFirst = true;
while (null != (str = br.readLine())) {
if (!isFirst)
content.append(System.lineSeparator());
//System.getProperty("line.separator");
else
isFirst = false;
content.append(str);
}
br.close();
} catch (Exception e) {
e.printStackTrace();
System.err.println("读取文件:" + path + "失败!");
}
return content.toString();
}
public static String getFileCharsetName(String fileName) throws IOException {
InputStream inputStream = new FileInputStream(fileName);
byte[] head = new byte[3];
inputStream.read(head);
String charsetName = "GBK";//或GB2312,即ANSI
if (head[0] == -1 && head[1] == -2 ) //0xFFFE
charsetName = "UTF-16";
else if (head[0] == -2 && head[1] == -1 ) //0xFEFF
charsetName = "Unicode";//包含两种编码格式:UCS2-Big-Endian和UCS2-Little-Endian
else if(head[0]==-27 && head[1]==-101 && head[2] ==-98)
charsetName = "UTF-8"; //UTF-8(不含BOM)
else if(head[0]==-17 && head[1]==-69 && head[2] ==-65)
charsetName = "UTF-8"; //UTF-8-BOM
inputStream.close();
//System.out.println(code);
return charsetName;
}
}
运行结果:
1.1题目算法实现题3-2 最少硬币问题★问题描述:设有n种不同面值的硬币,各硬币的面值存于数组T[1:n]中,现要用这些面值的硬币来找钱。可以使用的各种面值的硬币个数存于数组 Coins[l:n]中。对任意钱数0≤m≤20 001,设计一个用最少硬币找钱m的方法。★算法设计:对于给定的1≤n≤10,硬币面值数组T和可以使用的各种面值的硬币个数数组 Coins,以及钱数m,0≤m≤20 0...
web安全框架,主要用servlet filter方式覆盖httpServletRequest和HttpServletResponse方式增加一些输入输出的过滤,github地址:https://github.com/zhwj184/webSecurity主要实现的安全包括:XSS过滤(获取用户输入参数和参数值进行XSS过滤,对Header和cookie value值进行X
官方文档:https://www.consul.io/docs/connect/index.html#getting-started-with-connectconsul connect的功能类似与envoy,作为一个sidecar,用于实现service mesh,按我的理解,所谓的service mesh其实就是通过服务注册和服务发现,以及sidecar,屏蔽调用服务的ip和端口...
中国进搏会(七古)世界经济大发展, 治理方式大变革。国际秩序大调整,贸易关系大波折。抵制单边化逆浪,维护多边化规则。高举全球化旗帜,合奏现代化凯歌。2018、11、6 星期二金庸武侠作品(七古)直刀倚天屠龙记,弯弓射雕英雄传。神雕侠侣鹿鼎记,天龙八部碧血剑。杨过过与小龙女,三恋书剑恩仇传。笑傲江湖侠客行,雪山飞狐越女剑。东成西就连城诀,东邪西毒飞狐传。东方不败...
<el-table :data="moduleData2" tooltip-effect="dark" :header-cell-style="{background:'#ECF1FE'}"></el-table>api里有个header-cell-style,表头单元格的 style 的回调方法,也可以使用一个固定的 Object 为所有表头单元格设置一样的 Style。就可以改变表头的颜色了...
1.先移动你的maven仓库位置,就是把c盘下的.m2文件夹复制一份移动到你想移动的位置原位置:C:Users恒信科技.m2 要移动的位置:E:.m2 epository2.修改在maven的setting.xml文件找到并在后面加 <localRepository>E:.m2 epository</localRepository><settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xml
星期一来上班一打开电脑发现Ubuntu系统显示变形了,之前就遇到过这个问题但是一直没有解决好。今天解决了顺便记录下,也方便分享给大家:开机引导文件: /etc/default/grub1/修改开机引导文件:sudo gedit /etc/default/grub2/找到文件中的GRUB_GFXMODE,并将其改为GRUB_GFXMODE=1920x1080(你想要的分辨率),并去掉GRUB_...
vmware安装和使用
文章目录Harbor 企业级docker镜像私服一、介绍二、安装环境准备三、安装 Harbor1、下载离线安装包并解压2、安装资源及环境准备3、安装三、使用1、登录 Harbor2、向 Harbor 推送镜像(1)制作镜像(2)推送镜像Harbor 企业级docker镜像私服一、介绍 Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(R...
Part 1:图像识别任务介绍卷积神经网络,听起来像是计算机科学、生物学和数学的诡异组合,但它们已经成为计算机视觉领域中最具影响力的革新的一部分。神经网络在 2012 年崭露头角,Alex Krizhevsky 凭借它们赢得了那一年的 ImageNet 挑战赛(大体上相当于计算机视觉的年度奥林匹克),他把分类误差记录从 26% 降到了 15%,在当时震惊了世
(心月梦天)写在前面的:主要是为了做读书笔记共日后查阅吧,水平有限错漏之处在所难免,欢迎批评指教。无论如何,开发应该追求的是更优雅的代码、更高效的效率、更轻便的配置和更轻松的做事情。你觉得完美的代码随时间流逝会变得越发丑陋。Spring全家桶即将到达战场。
方法一:Array.prototype.method1 = function(){ var arr[]; //定义一个临时数组 for(var i = 0; i &lt; this.length; i++){ //循环遍历当前数组 //判断当前数组下标为i的元素是否已经保存到临时数组 //如果已保...