idea中使用Inputstream流导致中文乱码解决方法

1.问题描述

idea中使用Inputstream流导致中文乱码解决方法,当然也不一定就是输入流,可能输出流或者其他用到了流相关的字符的都可能出现乱码,这里有一个可能的解决办法。

2. 解决办法

① idea中找到下面的路径

File--Settings--Editor--File Encodings

② Transparent native-to-ascii conversion把这个前面勾上,重新创建文件,执行就OK

很多朋友遇到Java FileInputStream读中文乱码问题,下面小编在给大家普及下这方便的知识及解决方法。

1、前提

以读取编码是GBK的文件为案例,文件内容只有中文和中文符号

2、原因

FileInputStream读中文乱码是因为一个中文对应两个字节存储(负数),也就是说,读取对应中文的字节数应该是偶数; 而英文对应一个字节存储。FileInputStream每次读取一个数组长度的字节时,读取的中文字节数可能是奇数,也就是只读到中文的一半字节,出现乱码。

3、解决方法

一次读取所有字节,此方法不靠谱,因为不确定总字节数。

在输出时进行判断,遍历数组判断负数的个数,如果是奇数,说明读取到中文的一半字节,对数组进行扩容再输出;否则正常输出

4、代码案例

package 第二题;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import java.util.Arrays;​

public class MainTest {​

public static void main(String[] args) throws UnsupportedEncodingException {
// 创建File对象

File file = new File("D:\\filetest\\file4.txt");

FileInputStream fileInputStream = null;

try {
// 新建一个FileInputStream对象

fileInputStream = new FileInputStream(file);

// 新建一个字节数组

byte[] buf = new byte[2];

// read(buf):此方法的返回值就是当前读取的字节个数,将数据读取到buf数组

// 将readLen变量也就是read方法的返回值,当此变量等于-1,则读到文件末尾

int readLen = -1;

//读取文件数据

while ((readLen = fileInputStream.read(buf)) != -1) {
int pos=0;//记录负数的个数

for(byte v:buf)

{
if(v<0)

{
pos++;

}

}

//负数个数为偶数,读取完整,没有读取到半个中文

if(pos%2==0)

{
// 将字节数组转换成字符串

String content = new String(buf, 0, readLen);

System.out.print(content);

}else {//负数个数为奇数,读取不完整,会乱码

//再读取下一位字节

int nextByteValue=fileInputStream.read();

int nextLen=readLen+1;

//字节数组扩容一位

buf= Arrays.copyOf(buf,nextLen);

buf[readLen]= (byte) nextByteValue;

String content=new String(buf,0,nextLen);

System.out.print(content);

//奇数,字节补全

//针对数组扩容一个字节单元

/* buf=Arrays.copyOf(buf, readLen+1);

int nextByteValue=fileInputStream.read();

buf[readLen]= (byte) nextByteValue;

String content = new String(buf, 0, readLen);

System.out.print(content);*/

}

}

} catch (FileNotFoundException e) {
// 输出堆栈信息

e.printStackTrace();

} catch (IOException e) {
e.printStackTrace();

} finally {
try {
// 文件输入流关闭(释放资源)

fileInputStream.close();

} catch (IOException e) {
// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

以上就是idea中使用Inputstream流导致中文乱码解决方法的详细内容,更多关于idea Inputstream流乱码的资料请关注我们其它相关文章!

(0)

相关推荐

  • 解决IntelliJ IDEA 控制台输出中文乱码问题(史上最简单)

    首先,找到 IntelliJ IDEA 的安装目录,进入bin目录下,定位到idea.vmoptions文件,如下图所示: 双击打开idea.vmoptions文件,如下图所示: 然后,在其中追加-Dfile.encoding=UTF-8代码,如下图所示: 最后,在 IntelliJ IDEA 中的"Run/Debug Configurations"中,修改虚拟机参数" VM options ",内容与在文件idea.vmoptions中追加的内容相同,皆为-Dfi

  • idea日志乱码和tomcat日志乱码问题的解决方法

    1 idea启动tomcat乱码 遇到的问题: idea整合SSM项目,tomcat启动,启动时查看idea上的tomcat日志,出现乱码: 但是直接用tomcat 的 startup.bat启动,无乱码: 2,出现的原因: 查看tomcat/conf/logging.properties java.util.logging.ConsoleHandler.encoding = GBK 而本window系统使用的也是GBK编码,所以直接使用bat文件启动正常,但是idea上配置的是UTF-8,所以

  • 解决IDEA2020控制台乱码的方法

    以前使用idea2019版本时,控制台乱码都是修改这两处来解决 1.idea安装的bin目录下找到这两个文件 这两个文件最后一行添加上 -Dfile.encoding=UTF-8 2.idea中tomcat配置上添加 -Dfile.encoding=UTF-8 这样基本就可以解决了. 但是今天换成idea2020以后,这样修改,控制台还是乱码. 如果只是tomcat日志中文乱码,就需要修改tomcat配置文件conf/logging.properties 找到此处,原来这三处都是UTF-8,把它

  • 解决IDEA 启动Tomcat控制台乱码问题

    今天在Idea中用Tomcat跑一个Web项目,启动后,Tomcat日志在控制台打印出来都是乱码,如下图所示: 这个问题是Tomcat的编码问题引起的,解决该问题可以进行如下配置: -Dfile.encoding=UTF-8 如果还不行,就这样: 点击确定.重启TOMCAT进行调试,可以看到控制台中tomcat日志中的中文能正常显示了. 上面基本上应该不会出现乱码啦 如上述全部尝试还是乱码则需要修改配置文件 进入idea的安装目录, 进入bin目录下.找到idea.exe.vmoptions这个

  • idea中使用Inputstream流导致中文乱码解决方法

    1.问题描述 idea中使用Inputstream流导致中文乱码解决方法,当然也不一定就是输入流,可能输出流或者其他用到了流相关的字符的都可能出现乱码,这里有一个可能的解决办法. 2. 解决办法 ① idea中找到下面的路径 File--Settings--Editor--File Encodings ② Transparent native-to-ascii conversion把这个前面勾上,重新创建文件,执行就OK 很多朋友遇到Java FileInputStream读中文乱码问题,下面小

  • Maven发布Jar包中文乱码解决方法

    Maven deploy 乱码 今天使用Maven发布Jar包时,发布功能都是正常的也成功上传到了仓库,就是项目跑越来后出中文中现了乱码: { "code": "SUCCESS", "success": true, "message": "鎿嶄綔鎴愬姛", "data": [ { "key": "app_force_login", "va

  • 远程linux xshell下输出中文乱码解决方法

    使用xshell登录中文版CentOS或者redhat时,在xshell下如果输出的是中文的话可能会显示乱码,通过如下办法可以有效的解决乱码问题 linux中文乱码解决方法如下: 复制代码 代码如下: [root@localhost ~]# cd /etc/sysconfig/ [root@localhost sysconfig]# cp i18n i18n.bak #备份i18n文件 [root@localhost sysconfig]# echo "" >i18n [root

  • Spring MVC参数传递中文乱码解决方法分享

    概述 中国特色社会主义乱码问题是我们经常会碰到的问题,解决的办法有很多,本文分别介绍了GET方式和POST方式中文乱码解决方案中一劳永逸的办法. GET提交中文乱码解决方案 在乱码的Controller文件中采用下面的方法将编码转换成UTF-8 String str = new String(request.getParameter("参数名").getBytes("iso-8859-1"), "utf-8"); 修改项目所在的Tomcat服务器

  • PHP json_encode中文乱码解决方法

    相信很多人在使用Ajax与后台php页面进行交互的时候都碰到过中文乱码的问题.JSON作为一种轻量级的数据交换格式,备受亲睐,但是用PHP作为后台交互,容易出现中文乱码的问题.JSON和js一样,对于客户端的字符都是以UTF8的形式进行处理的,也就是说,使用JSON作为提交和接收的数据格式时字符都采用UTF8编码处理,当我们的页面编码和数据库编码不是采用UTF8的时候,就极容易出现中文乱码的问题.解决办法自然是在用js或者PHP处理JSON数据的时候都采用UTF8的形式. PHP5.2或以上的版

  • wxPython窗口中文乱码解决方法

    本文实例讲述了wxPython窗口中文乱码解决方法,分享给大家供大家参考.具体方法如下: 文件保存为 utf-8 文件开头添加 # -*- coding: utf-8 -*- 在有中文字符串前加u或U,例如:u"我的网站:http://www.jb51.net" 示例如下: 复制代码 代码如下: # -*- coding: utf-8 -*- import wx class App(wx.App):       def OnInit(self):         frame = wx.

  • python解压zip包中文乱码解决方法

    乱码得原因: 由于ZipFile模块导出遇到中文解码不对,windows上会出现,linux是否会出现不知道没测试过. 解决方式: 1. 搞个文件名引射表(不太方便,少量文件夹套用时候还可以) 2. 修改源码解码格式(不太方便,自己搞了一下,之后报其他错误) 3. 自己写入文件,自己创建文件夹(推荐) 自己创建的写法: with zipfile.ZipFile(file=zip_save_path, mode='r') as zf: # 解压到指定目录,首先创建一个解压目录 os.mkdir(u

  • mysql导入导出数据中文乱码解决方法小结

    linux系统中 linux默认的是utf8编码,而windows是gbk编码,所以会出现上面的乱码问题. 解决mysql导入导出数据乱码问题 首先要做的是要确定你导出数据的编码格式,使用mysqldump的时候需要加上--default-character-set=utf8, 例如下面的代码: 复制代码 代码如下: mysqldump -uroot -p --default-character-set=utf8 dbname tablename > bak.sql 那么导入数据的时候也要使用-

  • jquery的ajax()函数传值中文乱码解决方法介绍

    复制代码 代码如下: $.ajax({ dataType : 'json',type : 'POST',url : 'http://localhost/test/test.do',data : {id: 1, type: '商品'},success : function(data){ } } ); 问题: 提交后后台action程序时,取到的type是乱码 解决方法: 方法一:提交前采用encodeURI两次编码,记住一定是两次 1.修改以下代码 复制代码 代码如下: data:{id:1, t

  • Java Web开发项目中中文乱码解决方法汇总

    Java Web项目中,解决中文乱码方法总结如下 第一种情况:调用jsp页面中文显示乱码 问题描述:通过浏览器调用jsp页面,在浏览器中显示的中文内容出现乱码. 解决方法:首先确认本jsp在编辑器中保存文件内容时,使用的是utf-8的编码格式,然后在jsp页面的开始处添加<%@ pageEncoding="utf-8"%>就可以解决这种中文乱码问题 第二种情况:调用servlet页面显示乱码 问题描述:通过浏览器调用servlet,servlet在浏览器中显示的内容出现乱码

随机推荐