java自动根据文件内容的编码来读取避免乱码

2023-11-03

 

通过cpdetector这个开源的jar包可以自动判断当前文件的内容编码,从而在读取的时候选择正确的编码读取,避免乱码问题。

 

 原创不易,转载请注明出处:java自动根据文件内容的编码来读取避免乱码

 

测试结果,提供截图:

GBK文件内容

UTF8文件内容

 

运行结果:

 

package com.zuidaima.test;

import info.monitorenter.cpdetector.io.ASCIIDetector;
import info.monitorenter.cpdetector.io.CodepageDetectorProxy;
import info.monitorenter.cpdetector.io.JChardetFacade;
import info.monitorenter.cpdetector.io.ParsingDetector;
import info.monitorenter.cpdetector.io.UnicodeDetector;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;

public class Main {

	public static String getContent(String path) throws Exception {
		File file = new File(path);
		CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();
		detector.add(new ParsingDetector(false));
		detector.add(JChardetFacade.getInstance());
		detector.add(ASCIIDetector.getInstance());
		detector.add(UnicodeDetector.getInstance());
		java.nio.charset.Charset charset = null;
		try {
			charset = detector.detectCodepage(file.toURI().toURL());
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		String charsetName = null;
		if (charset != null) {
			charsetName = charset.name();
		} else {
			charsetName = "UTF-8";
		}
		BufferedReader reader = new BufferedReader(new InputStreamReader(
				new FileInputStream(file), charsetName));
		String line = null;
		String lines = "";
		while ((line = reader.readLine()) != null) {
			lines += line + "\n";
		}
		reader.close();
		return lines;
	}

	public static void main(String[] args) throws Exception {
		System.out.println(getContent("bin/gbk.txt"));
		System.out.println(getContent("bin/utf8.txt"));
	}
}

 代码下载地址:http://www.zuidaima.com/share/1550463235574784.htm

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java自动根据文件内容的编码来读取避免乱码 的相关文章

随机推荐

  • Windows一键清空回收站

    作为一个重度整洁患者 虽然生活较为邋遢 但是 桌面一定是整理的干干净净 桌面上的快捷方式没有几个 甚至打开计算机用的也是快捷键 那么就碰到了一个问题 回收站 它既不美观 又放在桌面上 甚至连快捷键都没有 那我删除的文件那该怎么清理 大家可能
  • KCF目标跟踪方法分析与总结

    KCF目标跟踪方法分析与总结 两个竖杠是什么数学符号 就是这个 这个符号叫做范数 它事实上是由线性赋范空间到非负实数的映射 在线性赋范空间中 它可以表示空间中的点与原点间的距离 两点间的距离也是用两点之差的范数来表示的 范数所满足的条件有
  • J2EE之自定义框架知识(下篇 综合运用增删改查)

    J2EE之自定义框架知识 下篇 综合运用增删改查 文章目录 J2EE之自定义框架知识 下篇 综合运用增删改查 前言 所需文件 1 将框架打成jar包 然后导入新工程 并且把框架的依赖jar包导入进去 1 1将框架打成jar包 1 2 导入所
  • 【51单片机学习笔记】基于STC11F04E的蜂鸣器音乐播放器

    微型播放器 基于STC11F04E的蜂鸣器控制 青岛科技大学 信息科学技术学院 集成162 Listen C 一 简介 1 任务需求 制作一个音乐播放器 能够播放生日快乐歌曲 2 制作原理 基于微控制器通过产生不同频率的方波使蜂鸣器发出特定
  • STM32CubeIDE SPI LCD曲线显示

    随言 spi lcd屏幕其实不适合用于曲线显示 数据传输太慢了而且传输数据过程还需传一些设置命令 但是需求来了 软硬件压榨一下也能做出来 硬件 STM32F407 1 54寸ST7789屏幕 STM32CubeIDE SPI配置速度最快 使
  • Hbase单机模式配置

    配置hbase env sh文件 vim usr local hbase conf hbase env sh 把java环境配置上去 export JAVA HOME export JAVA HOME tools JDK jdk1 8 0
  • JSP config对象的简介说明

    转自 JSP config对象的简介说明 下文笔者将讲述JSP中config对象的简介说明 如下所示 config对象 指JSP的配置信息 它实际就是一个ServletConfig实例 我们可以在config对象上获取Servlet的初始化
  • 如何与人交流——程序员,赶紧生个孩子吧!

    原文作者 Jeff Atwood 每个家庭都应该生一个孩子吗 我不太愿意这样建议 因为当不当父母完全是个人选择 我始终尽量避免鼓吹为人父母的经验 但我越深入这个角色 我便越是相信 没什么比拥有一个小孩更能折射出成人世界里源源不断的荒唐 成为
  • mysql 怎么区分大小写_MYSQL区分大小写

    MYSQL区分大小写 1 linux下mysql安装完后是默认 区分表名的大小写 不区分列名的大小写 2 用root帐号登录后 在 etc my cnf 中的 mysqld 后添加添加lower case table names 1 重启M
  • 64位windows7 关机时Wdf01000.sys蓝屏

    我的电脑是 thinkpad t430 据说thinkpad的电源管理器 6 0以上版本 与t430不兼容 而导致蓝屏重启 卸载电源管理器后 微软对0x0000007E解释的原因有这几种 如果在 Windows 安装过程中第一次重新启动后或
  • 各协议调制与编码

    15693 读写器调制方式唯一ASK 编码方式1 out 4 1 out 256可检测出来 由GUI指定 标签调制方式由读写器命令指定 编码唯一 曼彻斯特 18000 读写器调制方式由什么决定 编码方式唯一 PIE 标签调制方式由标签供应商
  • 基于 ESP32-C3 的 UART/ SPI 2.4G WiFi 透传模块(可用作智能车图传)

    基于 ESP32 C3 的 UART SPI 2 4G WiFi 透传模块 可用作智能车图传 本项目为基于乐鑫公司的 ESP32 C3 芯片制作的 WiFi 透传模块 具有多个通信协议接口 UART SPI 设计初衷是为了方便全国大学生智能
  • mybatis-plus调用自身的 selectById 方法报错:org.apache.ibatis.binding.BindingException:

    mybatis plus的版本号是 2 0 1 在调用自身的insert T 的时候没有报错 但是执行update报错 调用selectById deleteById的时候也报错 也就是涉及到需要主键识别的都报错 语句如下 接口与实现都是M
  • VC6.0 MFC点击编辑框弹出对话框

    在写界面的用于触屏时 往往需要编辑框弹出盘来进行输入 下面就将我思路写一下吧 1 刚开始在网让找一些这方面的资料 结果在论坛中有发现这样一个帖子 见面的链接 http topic csdn net u 20100630 15 728f2d7
  • 阅读理解机器问答系统

    机器问答系统流程如下图所示 具体过程 1 准备知识库 可以从维基百科或者百度百科中获取 知识库主要是存储实体与实体介绍文本 也就是百科中的词条与词条介绍 2 流程中涉及到三个模型 实体提取模型用来确定问题包含的实体 在知识库中查找确认对应介
  • 基于FPGA的spwm产生VHDL

    spwm产生 使用VHDL语言实现 实验过程 硬件操作 操作 上电 接入5V电源 用配套的线 USB那端接电脑即可 电源开关 按下电源开关 程序已经固化到FPGA上了 上电即可运行 工程截图
  • VHDL中对变量和信号的理解

    一 变量 1 变量的特点 局部量 只能在进程和子程序中使用 变量不能将信息带出对它定义的当前结构 变量的赋值是立即完成的 不存在任何延时行为 可以对变量进行多次赋值 不能列入进程的敏感表 2 变量的主要用途 对进程中作为临时存储单元 3 变
  • Python课程作品设计——基于EXCEL的批量重命名工具

    基于EXCEL的批量重命名工具 import os pandas tkinter tkinter messagebox from tkinter import class AR GUI def init self main window s
  • 基于SpringBoot的Mybatis-Plus插件整合

    公司刚开发一个ssm架构的项目 同事推荐了mybatis的一个插件 发现上手容易 高效简洁 下面是官方的文档 传送门请进 我的demo目录 注意SpringBoot的启动类的位置 1 首先添加pom文件的依赖
  • java自动根据文件内容的编码来读取避免乱码

    通过cpdetector这个开源的jar包可以自动判断当前文件的内容编码 从而在读取的时候选择正确的编码读取 避免乱码问题 原创不易 转载请注明出处 java自动根据文件内容的编码来读取避免乱码 测试结果 提供截图 GBK文件内容 UTF8