Java读取UTF-8格式文件第一行出现乱码——问号“?”及解决 And Java读带有BOM的UTF-8文件乱码原因及解决方法

测试例子:

Java读取UTF-8的txt文件第一行出现乱码“?”及解决

test.txt文件内容:

1

00:00:06,000 --> 00:00:06,010

<b>Allerleirauh</b> (2012)

<i>dTV - Das Erste - 20. Januar 2013</i>

2

00:00:10,280 --> 00:00:12,680

Was geh?rt zu einer guten Suppe?

3

00:00:14,200 --> 00:00:15,839

Eine gute Suppe...

test.txt文件采用写字板保存为UTF-8格式(此处为带有BOM的UTF-8文件)

保存并关闭后使用写字板再次打开该UTF-8文档,中文、字母正常显示

测试代码:

public static String srt2Txt(String filename){
		File infile = new File(filename);
		String realfile = filename.substring(0, filename.lastIndexOf(".srt")) + ".txt";
		String tempfile = realfile.replace('/', '\\');//Windows写入文件路径格式
		File outfile = new File(tempfile);
		BufferedReader bufferedReader = null;
		BufferedWriter bufferedWriter = null;
		try {
			bufferedReader = new BufferedReader(new FileReader(infile));
			bufferedWriter = new BufferedWriter(new FileWriter(outfile));
			String line;// 用来保存每次读取一行的内容
			while ((line = bufferedReader.readLine()) != null) {
				line = new String(line.getBytes("ISO-8859-1"), "ISO-8859-1");
			    bufferedWriter.write(line);
			    bufferedWriter.newLine();// 表示换行
			    bufferedWriter.flush();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(null != bufferedReader){
				try {
					bufferedReader.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(null != bufferedWriter){
				try {
					bufferedWriter.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return realfile;
	}

测试结果:

??

00:00:06,000 --> 00:00:06,010

<b>Allerleirauh</b> (2012)

<i>dTV - Das Erste - 20. Januar 2013</i>

2

00:00:10,280 --> 00:00:12,680

Was geh?rt zu einer guten Suppe?

3

00:00:14,200 --> 00:00:15,839

Eine gute Suppe...

解决方法:

使用UltraEdit将上边的txt文件另存为UTF-8无BOM格式;或者

使用Notepad++打开上边的txt文件执行如下操作“格式-->以UTF-8无BOM格式编码”,修改后将txt文本进行保存。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-05 21:35:22

Java读取UTF-8格式文件第一行出现乱码——问号“?”及解决 And Java读带有BOM的UTF-8文件乱码原因及解决方法的相关文章

MyEclipse导入Maven项目pom文件第一行报错,运行Tomcat报Log4j错误--解决方法

问题描述: 前一段时间电脑第一次导入Maven项目,又是pom文件错,改好后又是运行Tomcat报Log4j错误,一直倒腾了近一个月程序才成功跑起来,太不容易. 也上网查了很长时间,没一个方法能解决我的问题的.特记下解决方法,希望能帮到像我这样的web刚入门者. (刚入门,肯定有说的不对的地方,有错也希望能指出来,我改正) 前期操作:导入项目后clean,install,update,中会报错(因为我已经解决了,所以没有×). 两问题对应解决方法: 1.pom文件第一行大红叉,说明是项目的文件指

pom文件第一行报错(unknown)

问题: Eclipse导入maven项目时,或者新建一个springboot项目时,pom.xml文件第一行报错,没有错误信息提示,就一个Unknown,但是项目可以正常运行. 如下图: 原因: 因为版本升级了(2.2.6.RELEASE),开发工具不兼容导致. 解决: 在pom.xml 文件中的 properties 加入maven jar 插件的版本号.如下图: 然后maven --> update project 就可以发现万恶的小红叉消失了. 注意:这里的3.1.1版本不是自己用的mav

Referenced file contains errors (xml文件第一行小红叉错误)

在eclipse中开发网页时,经常会遇到写xml文件时第一行无缘无故报错.在最左面的行数上面报出一个小红叉, 点击查看错误信息: Referenced file contains errors (http://www.springframework.org/schema/beans......之类的.我这里是做的是spring的applicationContext.xml文件的,所以会报spring框架的约束格式错误.当我没有管这个错误继续运行项目时,发现这个错误并不影响项目的任何功能,但是总会

java读取导入csv格式 文件

第一.首先要准备下载一个javacsv.jar架包 public void readeCsv(){ try { ArrayList<String[]> csvList = new ArrayList<String[]>(); //用来保存数据 //注明:或者可以通过前端上传的文件,用一个方法获取上传文件名uploadName(String) String csvFilePath = "C:\\Users\\Administrator\\Desktop/05122017.c

【记录】springboot项目的maven的pom.xml文件第一行报错 Unknown Error

原因 : maven的插件版本的问题,造成与IDE的不兼容 解决办法 :在pom中加上 <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>就可以了 <properties>        <java.version>1.8</java.version>        <spring-cloud.version>Greenwich.SR1</spring-cloud

java读取数据文件,将数据封装到List&lt;Map&gt;集合中

数据文件的格式:第一行是字段名称,用"|"分隔,第二行开始是数据,也用"|"分隔,如下图所示 解析分装到集合的代码如下: package com.ultra.aliyun.control.main; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.

linux vi/vim编辑文件显示行号

方法一(最尴尬的方法): 1.显示当前行行号,在VI的命令模式下输入 :nu 2.显示所有行号,在VI的命令模式下输入 :set nu #这是:set number 的简写 方法二(最好的方法): 使用vi编辑~/.vimrc文件,该文件不存在时会自动生成一个新文件,所以不用担心该文件是否存在,在该文件中加入一行"set nu",添加内容不含引号, 命令如下: [[email protected] ~]# vi ~/.vimrc #生成.vimrc文件,在第一行输入如下内容: set

Java代码的基本格式及注释

Java代码的基本格式:  修饰符 class 类名{      程序代码 } 注:Java中的程序代码必须放在一个类中 在编写时要注意如下: 1.Java中的程序代码可分为:结构定义语句(用于声明一个类或方法).功能执行语句(用于实现具体的功能).每条功能执行语句的最后都必须用(;)结束. 2.Java语言严格区分大小写. 3.编写代码时,养成良好的排版习惯,增强代码的可读性. 4.Java中一句连续的字符串不能分开两行书写,除非分为两个字符串,用"+"将其连接. Java中的注释:

使用java读取文件夹中文件的行数

使用java统计某文件夹下所有文件的行数 经理突然交代一个任务:要求统计某个文件夹下所有文件的行数.在网上查了一个多小时没有解决.后来心里不爽就决定自己写一个java类用来统计文件的行数,于是花了两个小时将代码写出(可见我的java功底还是挺烂的).虽然有很多有待改进的地方,依然有纪念意义. 本java类的核心是通过BufferedReader类的readLine()方法,间接的统计行数:通过递归遍历文件. 这个类只是写来完成任务的.结果不是很严谨,许多情况并没考虑到:比如判断想读取某一类文件怎