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自动根据文件内容的编码来读取避免乱码 的相关文章

  • 协助持续进行 Java 到 C# 转换的工具

    如今 许多项目都是用 Java 编写的 其中一些最终转换为 C 以合并到 NET 中 我想到的例子有 log4net nhibernate 和 db4o 包括 Sharpen db4o 的工具 在内 您是否见过和 或使用过任何使连续转换变得
  • 如何从内容处置中读取编码的文件名

    我得到的内容处置标头值如下 附件 文件名 UTF 8 album jpeg 如何从中提取文件名 album jpeg 在查看该值时 它具有编码格式值 使用Spring的内容配置 https docs spring io spring doc
  • 删除 PriorityQueue 的顶部?

    假设我使用 Java util 中的 PriorityQueue 类 我想从 PriorityQueue pq 中删除最大的数字 我们假设它位于队列的头部 下面的工作会起作用吗 1 int head pq peek pq dequeue h
  • 如何使用 Java 本机接口将字节数组传递到以 char* 作为参数的 C 函数中?

    所以我需要使用JNI从java调用C函数 当传入不同的数据类型 创建本机变量 头文件 共享库等等 时 我已经能够成功地做到这一点 但无法让它与字节数组一起使用 这是我的 C 函数 include
  • Powermockito 可以在非最终具体类中模拟最终方法吗?

    假设我有一个非最终具体类 具有如下所示的最终方法 public class ABC public final String myMethod return test test 可以嘲笑吗myMethod 调用时返回其他内容junit usi
  • 从 HashMap 条目列表中删除重复项

    我有一个List
  • 通过代理从java发送电子邮件

    我使用 Java Mail API 来发送和接收电子邮件 现在我做这个项目的地方有一个代理服务器 我可以知道如何通过代理服务器从java发送电子邮件吗 请参阅此处的常见问题解答 http www oracle com technetwork
  • 在 IIS 中运行 Java Web 应用程序

    有人找到了在 IIS 中运行 Java Web 应用程序的方法吗 在我看来 编写一个将 Jetty 或自定义 servlet 容器与 IIS 集成的 ISAPI 插件 这个词正确吗 应该是完全可能的 这样做的好处是 许多优秀的高端 Java
  • 在 Java 中停止线程? [复制]

    这个问题在这里已经有答案了 我正在编写一段代码 该代码连接到服务器 使用该连接生成一堆线程并执行一堆 东西 在某些情况下 连接会失败 我需要停止一切并从头开始使用新对象 我想在对象之后进行清理 但在线程上调用 thread stop 但此方
  • 如何在Intellij IDEA中复制maven依赖项到输出工件WEB-INF/lib?

    我知道在 eclipse maven 中可以将依赖项复制到 WEB INF lib 目录setting Deployment Assembly and Build Path 但是我怎样才能用 Intellij IDEA 实现这一点呢 好的
  • Hazelcast Jet 变更数据捕获

    我在我的应用程序中使用 Hazelcast 更改数据捕获 CDC 我使用 CDC 的原因是 如果使用 jdbc 或其他替代功能将数据加载到缓存中 会花费大量时间 所以CDC将在数据库和 Hazelcast Jet 之间进行数据同步 Stre
  • Spring 在 AuthenticationSuccessHandler 中自动装配会话范围 bean 不起作用

    我正在使用 spring security 我想初始化一个对象User在用户成功登录后的会话中 安全配置如下 Configuration EnableWebSecurity PropertySource classpath configs
  • 测试正确的时区处理

    我们正在处理大量数据 所有数据均以 UTC Java 语言 标记 在读取这些数据 将其存储在数据库中以及再次将其取出之间 发生了一些数据在夏令时期间关闭一小时的情况 由于 UTC 没有夏令时的概念 这显然是软件中的一个错误 一旦知道 就很容
  • Java 会话变量

    我听说有些人认为在会话中将信息存储在服务器上是一个坏主意 因为它不安全 因此 在多页面业务流程功能中 应用程序将数据写入数据库 然后在需要时检索信息 在会话中存储私人信息是否一定不安全 只要会话本身安全 在会话中存储属性就不存在安全风险劫持
  • IntelliJ 对于 Java 项目使用的默认构建过程是什么?

    直接从 IntelliJ 中的 IDE 构建 Java 项目非常好 它速度很快 而且很有效 我无法找到任何有关 IntelliJ 如何进行这些默认构建的文档 我猜它使用Ant 我想做的是为下载我的项目的任何人自动化这个快速 轻松的构建过程
  • java代码的等效vb代码

    谁能告诉我这段Java代码到底做了什么 SecureRandom random SecureRandom getInstance SHA1PRNG byte bytes new byte 20 synchronized random ran
  • 为什么我用Java计算的结果是错误的?

    我使用这段代码来计算一些东西 但几乎在所有情况下结果都是 0 0 为什么 编译器中没有警告或错误 private void jButton1ActionPerformed java awt event ActionEvent evt try
  • 应返回带有 html 代码的字符串的支持 bean 属性返回空字符串

    我的支持 bean 中有一个返回 html 代码的属性 public String getHtmlPrevisualizar return Hello world 我想要做的是在 iframe 中显示这个 html 代码 我用 JavaSc
  • 如何删除 Spring 的 RestTemplate 添加的某些 HTTP 标头?

    我在远程服务方面遇到问题 我无法控制对使用 Spring 的 RestTemplate 发送的请求进行 HTTP 400 响应 使用发送的请求curl但被接受了 所以我将它们与通过 RestTemplate 发送的内容进行了比较 特别是 S
  • 无法读取使用 DataOutputStream 发送的号码

    这是我的客户端代码 Random rand new Random int n rand nextInt 50 1 DataInputStream dis new DataInputStream socket getInputStream D

随机推荐

  • 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