Java如何识别并读取不同编码的txt文本文件

news/2025/2/7 10:49:33/文章来源:https://www.cnblogs.com/zhaojinhui/p/18702210

说明

在Java中读取不同编码的文本文件时出现乱码问题,通常是因为文件的编码格式与程序中指定的编码格式不匹配。例如,如果你的文件是用UTF-16编码的,而你尝试用UTF-8来读取,就会导致乱码。

情况1:已知文件编码

1、确定文件的编码格式
首先,你需要确定你的文本文件的编码格式。常见的编码格式有UTF-8、GBK、GB2312、ISO-8859-1等。你可以使用一些工具(如Notepad++、Sublime Text、VSCode等)来查看或修改文件的编码格式。

2、使用正确的编码读取文件
在Java中,你可以使用java.nio.file.Files类或java.io.InputStreamReader类来读取文件,并指定正确的字符集(编码)。

3、代码示例

import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.charset.StandardCharsets;
import java.util.List;public class ReadFileExample {public static void main(String[] args) {try {// 指定文件路径和编码List<String> lines = Files.readAllLines(Paths.get("path/to/your/file.txt"), StandardCharsets.UTF_8);for (String line : lines) {System.out.println(line);}} catch (Exception e) {e.printStackTrace();}}
}

情况2:不知文件编码

如果你不确定文件的编码,或者想要程序能够自动处理多种编码,可以考虑使用第三方库如Apache Commons IO,它提供了更灵活的编码处理方式。
1、先添加依赖到你的项目中

<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.8.0</version>
</dependency>

2、代码示例

import org.apache.commons.io.input.BOMInputStream;
import org.apache.commons.io.ByteOrderMark;
import java.io.*;
import org.apache.commons.io.input.AutoDetectReader;
import java.nio.charset.Charset;public class ReadFileExample {public static void main(String[] args) {try (AutoDetectReader reader = new AutoDetectReader(new FileInputStream("path/to/your/file.txt"), new ByteOrderMark[] { ByteOrderMark.UTF_8, ByteOrderMark.UTF_16LE, ByteOrderMark.UTF_16BE }, "UTF-8")) { // Default encoding if no BOM is found or cannot be determinedchar[] buffer = new char[1024];int numCharsRead;while ((numCharsRead = reader.read(buffer)) != -1) {System.out.println(new String(buffer, 0, numCharsRead));}} catch (IOException e) {e.printStackTrace();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/879983.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【8】Manacher算法学习笔记

前言Manacher 算法是最好写的字符串算法。——教练暴力求法给出一个只由小写英文字符 \(\texttt a,\texttt b,\texttt c,\ldots\texttt y,\texttt z\) 组成的字符串 \(S\),求 \(S\) 中最长回文串的长度 。暴力算法 \(1\): 枚举左右端点,\(O(n)\) 判断是否为回文串,时间复杂…

SAP ABAP ISM_SD_GET_PRICING_CONDITIONS 订单价格定价

SAP ABAP ISM_SD_GET_PRICING_CONDITIONS 订单价格定价SAP ABAP ISM_SD_GET_PRICING_CONDITIONS 订单价格定价DATA km LIKE STANDARD TABLE OF konv WITH HEADER LINE.CALL FUNCTION ISM_SD_GET_PRICING_CONDITIONSEXPORTINGin_vbeln = 0010500001in_posnr = 010TABLESkonv_tab…

Godot Engine

Godot Docs – 4.3 branch — Godot Engine (4.3) documentation in English,Best Wish 不负年华

Python与PyCharm的工具安装

主要针对windows环境进行部署并且联通oracle: 第一步:安装python (注:python的版本选用要与oralce版本一致,目前安装版本使用python 3.10.x与oracle 版本cx_Oracle-8.3.0-cp310-cp310-win_amd64.whl(注:cp310代表oracle版本)一致) 安装教程链接(转载):https://blog.c…

spring之自动注入

XML配置文件 使用autowired属性来进行自动注入,如下所示,如果 autowire="byType那么spring会在所有对象中查找类型为Cat所需要的属性的类型的对象,假设cat中有一个属性是类Class1,那么spring会查找类Class1对应的对象,如果找到且只找到一个,那么进行注入,否则就注入…

训练手势数据分类模型-从手势图片——手势关键点坐标-通过关键点识别手势

数据集:从手势图片——>手势关键点坐标手势图片,获取手势关键点数据from XEdu.hub import Workflow as wf import numpy as npdef get_model_path():import ospath = os.path.dirname(os.path.abspath(__file__))model_path = os.path.join(path,model.onnx)return model_…

【数学】信息论之从熵、惊奇到交叉熵、KL散度和互信息

转自:https://www.cnblogs.com/justLittleStar/p/17322197.html 一、熵(PRML) 考虑将A地观测的一个随机变量x,编码后传输到B地。这个随机变量有8种可能的状态,每个状态都是等可能的。为了把x的值传给接收者,需要传输一个3-bits的消息。注意,这个变量的熵由下式给出:⾮均…

用多项式回归分析简单投掷数据-训练投石机数据预测模型

用多项式回归分析简单投掷数据 进阶实验:训练投石机数据预测模型 问题描述:(1)投掷角度不变,已知电机速度,如何得出实际投掷距离?(2)其电机速度(motor_speed)和投掷距离(distance)的对应关系有什么关系? 投掷角度不变,电 机速度与投掷距离 的数据集展示: 学习:i可以通过…

css背景模糊效果

下面是效果下面是实现代码<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta http-equiv="X-…

线性回归模型训练-训练温度传感器数据预测模型

基础实验:训练温度传感器数据预测模型 任务描述:LM35是科创作品制作中常用的温度传感器(1)已知电压值, 如何得出实际温度值?(2)输出电压(Sensor)和真实温度(Temperature)有什么关 系?请借助大模型生成这两列数据的关系图 /目录学习:可以通过机器学习,训练传感器数据预测模型…

【分享】银行业如何实现内外网文件传输,保持核心竞争力?

数据要素是数字经济的重要基石,也是国家经济安全的关键要素。银行业数据因其数据体量大、数据类型多、涉及主体庞大及应用场景复杂等天然特征,在数据流转上面临风险和挑战,包括法律法规层面、安全层面、效率层面等。为响应和落实国家层面对于金融行业网络安全的建设要求,同…

SMT32的HEX文件里加入固件版本的方法(转)

使用MDK编译器,让STM32程序HEX文件中加入固件版本信息。 代码代码如下: //------------------------------------------------------------------------------#include <absacc.h>//------------------------------------------------------------------------------#d…