该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

InputStreamReader in = new InputStreamReader(new FileInputStream(“demo.txt”),”UTF-8”);

给InputStreamReader指定解码编码,这样二者统一就不会出现乱码了。

下面说说字符输出流。

字符输出流的原理和字符输入流的原理一样,也可以看做是包装流,其底层还是采用字节输出流来写文件。只是字符输出流根据指定的编码将字符转换为字节的。字符输出流的主要类是:OutputStreamWriter。Java api解释如下:OutputStreamWriter 是字符流通向字节流的桥梁:使用指定的 charset 将要向其写入的字符编码为字节。它使用的字符集可以由名称指定或显式给定,否则可能接受平台默认的字符集。说的很明白了,它需要一个编码将写入的字符转换为字节,如果没有指定则采用GBK编码,那么输出的字节都将是GBK编码,生成的文件也是GBK编码的。如果采用以下方式构造OutputStreamWriter:

OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(“dd.txt”),”UTF-8”);

那么写入的字符将被编码为UTF-8的字节,生成的文件也将是UTF-8格式的。

问题二: 既然读文件要使用和文件编码一致的编码,那么javac编译文件也需要读取文件,它使用什么编码呢?

这个问题从来就没想过,也从没当做是什么问题。正是因为问题一而引发的思考,其实这里还是有东西可以挖掘的。下面分三种情况来探讨,这三种情况也是我们常用的编译java源文件的方法。

1.javac在控制台编译java类文件。

通常我们手动建立一个java文件Demo.java,并保存。此时Demo.java文件的编码为ANSI,中文操作系统下就是GBK.然后使用javac命令来编译该源文件。”javac Demo.java”。Javac也需要读取java文件,那么javac是使用什么编码来解码我们读取的字节呢?其实javac采用了操作系统默认的GBK编码解码我们读取的字节,这个编码正好也是Demo.java文件的编码,二者一致,所以不会出现乱码情况。让我们来做点手脚,在保存Demo.java文件时,我们选择UTF-8保存。此时Demo.java文件编码就是UTF-8了。我们再使用”javac Demo.java”来编译,如果Demo.java里含有中文字符,此时控制台会出现警告信息,也出现了乱码。究其原因,就是因为javac采用了GBK编码解码我们读取的字节。因为我们的字节是UTF-8编码的,所以会出现乱码。如果不信的话你可以自己试试。那么解决办法呢?解决办法就是使用javac的encoding参数来制定我们的解码编码。如下:javac -encoding UTF-8 Demo.java。这里我们指定了使用UTF-8来解码读取的字节,由于这个编码和Demo.java文件编码一致,所以不会出现乱码情况了。

2.Eclipse中编译java文件。

我习惯把Eclipse的编码设置成UTF-8。那么每个项目中的java源文件的编码就是UTF-8。这样编译也从没有问题,也没有出现过乱码。正是因为这样才掩盖了使用javac可能出现的乱码。那么Eclipse是如何正确编译文件编码为UTF-8的java源文件的呢?唯一的解释就是Eclipse自动识别了我们java源文件的文件编码,然后采取了正确的encoding参数来编译我们的java源文件。功劳都归功于IDE的强大了。

3.使用Ant来编译java文件。

Ant也是我常用的编译java文件的工具。首先,必须知道Ant在后台其实也是采用javac来编译java源文件的,那么可想而知,1会出现的问题在Ant中也会存在。如果我们使用Ant来编译UTF-8编码的java源文件,并且不指定如何编码,那么也会出现乱码的情况。所以Ant的编译命令有一个属性” encoding”允许我们指定编码,如果我们要编译源文件编码为UTF-8的java文件,那么我们的命令应该如下:

指定了编码也就相当于”javac –encoding”了,所以不会出现乱码了。

java为什么全是乱码_java一切乱码的解释 以及源头相关推荐

  1. java 奇数中文乱码_java web 乱码 整理

    众所周知 java 程序使用的是Unicode 编码字符集,是说java内存里面使用Unicode字符集操作文字,java内存外当然使用的是程序员自己制定的字符集,如果程序员没有指定字符集,那么会使用 ...

  2. java 空格乱码_java 中文乱码以及空格乱码解决方案总结

    当使用response.write返回JSON数据到前端时,需要在前面加上这句 response.ContentType = "text/html;charset=gb2312"; ...

  3. java encode乱码_java 中文乱码问题的解决

    java中的中文乱码问题应该是我们经常碰到的一个问题,今天就来总结下对于乱码问题的解决方法: 1. 超链接中带有的中文字符,添加 这样如果不进行处理在后台得到的数据就会出现中文乱码的问题,由于超链接实 ...

  4. java web 乱码_java web乱码解决方法

    设置文件的保存编码格式,这个一般在新建项目时,设置了GBK的编码格式,这时文件的页面编码格式是GBK的,而保存格式是ANSI的,后来把项目及文件的编码格式改为utf-8的编码格式后,依然出现中文乱码, ...

  5. c与java的中文乱码_Java 中文乱码问题总结

    由于Java编程中的中文问题是一个老生常谈的问题,在阅读了许多关于Java中文问 题解决方法之后,结合作者的编程实践,我发现过去谈的许多方法都不能清晰地说明问题及解决问题,尤其是跨平台时的中文问题.于 ...

  6. java 对象乱码_java对象乱码怎么办

    java对象乱码怎么办,乱码,方式,数据库,要用,解决办法 java对象乱码怎么办 易采站长站,站长之家为您整理了java对象乱码怎么办的相关内容. java对象乱码的解决办法:1.文件下载乱码时,下 ...

  7. java word 乱码_java word 乱码怎么办,_Java_ 少侠科技

    详细内容 java word 乱码怎么办? Java另存Word并解决乱码问题* 专家意见另存word *@YaoWei *2014-6-16 下午12:09:07 * @param request ...

  8. java utf8乱码_java utf-8 乱码怎么办

    java utf-8 乱码怎么办? 1.在html首部编写如下代码: 推荐教程:<java学习> pageEncoding="utf-8"%> 示例如下: pag ...

  9. java转换中文乱码_java中文乱码解决之道(四)-----java编码转换过程

    前面三篇博客侧重介绍字符.编码问题,经过这三篇博客各位博友对各类字符编码有了一个初步的了解,要了解java的中文问题这是必需要了解的.可是了解这些仅仅只是一个开始,如下博客将侧重介绍java乱码是如何 ...

最新文章

  1. Kafka 六战 RabbitMQ,这差距还不够明显吗?
  2. 智源青年科学家黄高:面向高效推理的深度网络结构设计
  3. antd中的form表单 initialValue导致数据不更新问题
  4. 2.利用计算机进行信息加工的一般过程是:,[信息技术教案]《计算机信息加工的一般过程》教案...
  5. java中的serializable_java中的Serializable接口的作用
  6. mongoDB的安装(一)
  7. Linux里怎么进行路由跟踪,[Linux] traceroute 路由跟踪指令用例
  8. 微软发布新品被指剽窃!交涉无果,两年开源项目被迫终结
  9. d - 数据结构实验之查找四:二分查找_【数据结构】资料
  10. python图像卷积_图像处理——卷积原理、二维卷积python实现
  11. Android UI系列-----ScrollView和HorizontalScrollView
  12. 一大波Java来袭(四)String类、StringBuilder类、StringBuffer类对照
  13. 软件系统架构师大概工作过程
  14. vue-cli初始化一个项目
  15. 软考高级 真题 2017年上半年 信息系统项目管理师 综合知识
  16. excel转word_这3种Word、Excel格式不变的互转方法,实在太好用了
  17. 李春葆、严蔚敏关于KMP算法的next数组值差1
  18. S7-1200PLC—实验五 引风机和送风机的顺序控制
  19. Android开发-自定义View-AndroidStudio(二)遇到问题,附:ScrollView中文API
  20. 淘宝首页链接跳转,非taobao.com域名下的链接处理

热门文章

  1. Apache Shiro第2部分–领域,数据库和PGP证书
  2. 现代化Java代码的七个NetBeans提示
  3. python nums函数获取结果记录集有多少行记录_PHP mysqli_num_rows():获取查询结果的行数...
  4. 配置 Powerline 到 Vim
  5. iTerm2 隐藏用户名和主机名
  6. Final Cut Pro X剪辑影片基本步骤
  7. multi task训练torch_Multi-task Learning的三个小知识
  8. Thread 线程同步、线程状态
  9. 在计算机中 用户程序,在用户计算机上的万维网客户程序是()
  10. opencv 把3通道图像转成单通道_小强学Python+OpenCV之-1.4.3图像(矩阵)加减运算