InputStream 读取中文乱码 扩展
对于InputStream读取中文乱码,下面这段话给出了很好的解释,以及后续编码上的扩展。 BufferedInputStream和BufferedOutputStream是过滤流,需要使用已存在的节点来构造。
即必须先有InputStream或OutputStream,相对直接读写,这两个流提供带缓存的读写,提高了系统读写效率性能。
BufferedInputStream读取的是字节byte,因为一个汉字占两个字节,而当中英文混合的时候,有的字符占一个字节,有的字符占两个字节。
所以如果直接读字节,而数据比较长,没有一次读完的时候,很可能刚好读到一个汉字的前一个字节,这样,这个中文就成了乱码,后面的数据因为没有字节对齐,也都成了乱码。
所以我们需要用BufferedReader来读取,它读到的是字符,所以不会读到半个字符的情况,不会出现乱码。
package com.read; import java.io.*; /**
*千字文.txt 在 classpath 用来测试
*/
public class Main { public static void main(String[] args) { File file = new File("千字文.txt"); Object obj = loadFileContent(file);
if (obj!=null){
System.out.println(obj.toString());
}
} /**
* 此方法 读到的是字符,所以不会读到半个字符的情况,不会出现乱码.
* @param file
* @return
*/
public static Object readFile(File file) {
StringBuilder buffer = new StringBuilder();
try {
if (!file.exists()) {
return null;
} InputStream inputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(bufferedInputStream)); while (bufferedReader.ready()) {
buffer.append((char) bufferedReader.read());
} bufferedReader.close();
bufferedInputStream.close();
inputStream.close(); return buffer.toString();
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
} /**
* byte字节流读取文件时 一个汉字占2个字节
* 可能只能读到半个 时长度没有一次读完时 字符无法对齐
* 出现乱码 可能会是以上原因
* @param file
* @return
*/
public static Object loadFileContent(File file) {
StringBuffer buffer = new StringBuffer();
try { if (!file.exists()) {
return null;
} InputStream inputStream = new FileInputStream(file);
byte[] bytes = new byte[1024];
int length; while ((length = inputStream.read(bytes)) != -1) {
buffer.append(new String(bytes, 0, length));
} inputStream.close(); return buffer.toString();
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
InputStream 读取中文乱码 扩展的更多相关文章
- File.ReadAllText 读取中文乱码问题
原文:File.ReadAllText 读取中文乱码问题 用 File.ReadAllText(filepath) 去读取中文txt文件会遇到乱码问题,我自己测试了一下,ANSI编码的txt才会出 ...
- 关于java.util.Properties读取中文乱码的正确解决方案(不要再用native2ascii.exe了)
从Spring框架流行后,几乎根本不用自己写解析配置文件的代码了,但近日一个基础项目(实在是太基础,不能用硕大繁琐的Spring), 碰到了用java.util.Properties读取中文内容(UT ...
- 解决使用Properties读取中文乱码问题
web服务返回的是多行以key和value对应的键值对,且编码为utf-8.我的项目使用的编码也是utf-8,但是我用Properties读取中文的时候,打印出来的总是乱码. 后来网上查了一下,得到如 ...
- Delphi NativeXml读取中文乱码问题解决
NativeXml默认的字符类型为Utf8String,有时在读取中文时还是会出现乱码问题,在329版本中提供一种类型转换函数sdUtf8ToWide(),我们可以这样sdUtf8ToWide(AXm ...
- 如何处理Cookie存储和读取中文乱码问题
存储Cookie for(String str:books){ str=new String(str.getBytes("ISO-8859-1"),"utf-8" ...
- jmeter之http请求用csv读取中文乱码
jmeter3.2版本中CSV Data Set Config从本地读取静态文件的时候,遇到中文乱码的解决方式如下: CSV Data Set Config设置 http请求数据显示乱码 把txt文档 ...
- sqlite读取中文乱码(C#)
C#读取一些C++创建的sqlite数据库时乱码, C++保存DB是用GB2312编码的, C#调用的官方的system.data.sqlite是用的UTF-8编码的, 在读取时会乱码, 用一个GB ...
- boost.property_tree读取中文乱码问题正确的解决方式
开发项目的时候在使用boost,在宽字符下遇到中文乱码问题 上网上看大家都是先转成utf8在进行解析的,例如: http://blog.csdn.net/hu_jiangan/article/deta ...
- java读取中文乱码解决方法
Java读取文本文件(例如csv文件.txt文件等),遇到中文就变成乱码.读取代码如下: List<String> lines=new ArrayList<String>(); ...
随机推荐
- Django 通过 ORM 实现表的CRUD
Django 通过 ORM 实现表的CRUD 单表的创建 修改 setting.py 文件 DATABASES = { 'default': { 'ENGINE': 'django.db.backen ...
- C语言|博客作业08
这个作业属于哪个课程 C语言程序设计II 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/9976 我在这个课程的 ...
- Mint UI Example的运行
Mint -UI是新推出的移动端UI框架 官网 不过官网上的文档例子不是很全面. 建议下载他们提供的example来学习. 1.examplle源码下载地址 2.打开项目,我这里使用webstorm, ...
- python读取 ini 配置文件
在详解python读取ini文件之前,我们先说明一个ini文件的组成: 一个ini文件是由多个section组成,每个section中以key=vlaue形式存储数据: 然后我们来使用python读取 ...
- ProxySQL读写分离代理
实现ProxySQL反向代理Mysql读写分离 简介 ProxySQL相当于小型的数据库,在磁盘上有存放数据库的目录:ProxySQL用法和mysql相似 启动ProxySQL后会有两个监听端口: 6 ...
- 16 Zabbix4.4.1系统告警“Zabbix agent is not available (for 3m)“
点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 Zabbix4.4.1系统告警“Zabbix agent is not available (fo ...
- 【论文阅读】TextSnake: A Flexible Representation for Detecting Text of Arbitrary Shapes
TextSnake: A Flexible Representation for Detecting Text of Arbitrary Shapes ECCV2018 北京大学.face++ 思路: ...
- 【NHOI2018】衰减
[解题思路] 显然这题并不难,由于数据范围较小,完全可以用DFS解决. 从原数开始每次变异的图谱,每次记录住当前的路径. 当找到1时就可以输出并回溯了. 小技巧:printf和scanf可以提高输出输 ...
- python中将xml格式转json格式
一.简介 在用python写脚本时,通常需要处理xml格式的文件或字符串.由于json格式处理的方便性, 我们可将其转为json格式进行处理. 二.步骤 1.安装工具包xmltodict 在命令行输入 ...
- centos7安装fail2ban
fail2ban是一款非常实用的安全软件,通过监视系统日志,设置错误登陆次数,可阻挡暴力密码攻击. 1.安装epelyum install epel-release -y 2.安装fail2banyu ...