`
wangyanwei2011
  • 浏览: 493 次
社区版块
存档分类
最新评论

Java一切乱码的解释 以及源头

阅读更多

Java读取文件的方式总体可以分为两类:按字节读取和按字符读取。按字节读取就是采用InputStream.read()方法来读取字节,然后保存到一个byte[]数组中,最后经常用new String(byte[]);把字节数组转换成String。在最后一步隐藏了一个编码的细节,new String(byte[]);会使用操作系统默认的字符集来解码字节数组,中文操作系统就是GBK。而我们从输入流里读取的字节很可能就不是GBK编码的,因为从输入流里读取的字节编码取决于被读取的文件自身的编码。举个例子:我们在D:盘新建一个名为demo.txt的文件,写入”我们。”,并保存。此时demo.txt编码是ANSI,中文操作系统下就是GBK。此时我们用输入字节流读取该文件所得到的字节就是使用GBK方式编码的字节。那么我们最终new String(byte[]);时采用平台默认的GBK来编码成String也是没有问题的(字节编码和默认解码一致)。试想一下,如果在保存demo.txt文件时,我们选择UTF-8编码,那么该文件的编码就不在是ANSI了,而变成了UTF-8。仍然采用输入字节流来读取,那么此时读取的字节和上一次就不一样了,这次的字节是UTF-8编码的字节。两次的字节显然不一样,一个很明显的区别就是:GBK每个汉字两个字节,而UTF-8每个汉字三个字节。如何我们最后还使用new String(byte[]);来构造String对象,则会出现乱码,原因很简单,因为构造时采用的默认解码GBK,而我们的字节是UTF-8字节。正确的办法就是使用new String(byte[],”UTF-8”);来构造String对象。此时我们的字节编码和构造使用的解码是一致的,不会出现乱码问题了。

 

分享到:
评论

相关推荐

    Java乱码学习 Java乱码学习

    Java 乱码问题一直是开发...总结来说,Java乱码问题需要从源头(文件编码)、编译过程、网络传输以及服务器处理等多个层面进行排查和设置。了解并掌握这些知识点,将有助于我们更好地预防和解决Java环境下的乱码问题。

    java中文乱码解决之道(4)java编码转换过程Java

    解决Java中文乱码问题需要对整个数据流的编码处理有清晰的理解,从源头文件到最终输出的每个环节都要注意编码的一致性。通过细致的排查和设置,大多数乱码问题都能得到解决。 以上内容涵盖了Java编码转换的基本原理...

    java中文传值乱码问题的解决方法

    总之,Java中文乱码问题的解决需要关注字符集的设置和转换操作,从源头到接收端都要保持一致的编码规则。通过上述方法,可以有效地避免或解决大部分的Java中文乱码问题。在日常开发中,养成良好的编码习惯,及时检查...

    WEB页面乱码研究问题

    不同的编程语言和平台支持不同的中文编码标准,这正是乱码问题的源头。常见的几种字符编码包括: 1. **ISO8859-1编码**:单字节编码,仅能表示255种字符,主要用于英文,不支持中文字符。 2. **GB2312/GBK字符集**...

    Ajax FireFox IE 乱码兼容问题

    - **统一编码标准**:在项目初始化阶段,设定统一的字符编码标准,如全站采用UTF-8编码,从源头上避免编码不一致导致的乱码问题。 - **数据库与服务器配置**:确保数据库、服务器和应用程序的字符编码设置一致,一般...

    解决Mysql数据库在web开发中乱码问题

    在深入解决方案之前,我们首先需要了解字符集的基本概念以及乱码产生的根源。字符集是一种用于表示字符的标准集合,如ASCII、GBK、UTF-8等。在计算机系统中,每个字符都有一个对应的编码,而不同的字符集意味着不同...

    基于eclipse的java内存分析工具MAT

    3. **支配树分析**:MAT的支配树视图能帮助开发者找到最大的对象,这些对象可能是内存泄漏的源头。支配树展示了内存中的每个对象如何被其他对象引用,以及哪些对象无法被GC回收。 4. **饼图和柱状图**:通过这些...

    java汉字问题解决方案

    在处理汉字乱码问题时,关键在于识别问题的源头——是文件读写、控制台输出、网络传输还是其他,然后针对性地调整编码设置。同时,养成良好的编码习惯,比如统一使用UTF-8编码,能减少很多不必要的麻烦。对于`java...

    PHP基于curl post实现发送url及相关中文乱码问题解决方法

    - 使用其他工具(如浏览器或Postman)测试请求,看是否同样出现乱码,以便定位问题源头。 总的来说,解决PHP cURL中的中文乱码问题,需要从数据来源、传输过程到接收端的整个链路进行排查,确保每个环节的字符集...

    解决Mysql5.7中文乱码的问题

    在使用MySQL数据库的过程中,中文乱码问题是一个常见的问题。尤其是在Web应用中,中文数据在...此外,需要注意的是,在数据库设计时,应尽量保持数据库端和应用端字符集的一致性,这样可以在源头上避免乱码问题的发生。

    学见的一些运行web项目时的乱码问题

    在遇到乱码问题时,可以按照文件的编码、传输过程、数据库存储、页面展示等步骤进行排查,逐步定位问题源头。 提供的“解决乱码问题”压缩包可能包含一些具体的解决方案,包括代码示例、配置文件模板等,可以参考...

    URL传参数时中文乱码解决方法

    本文将深入探讨URL传参数时中文乱码的原因、影响以及如何有效解决这一问题,确保数据的准确性和系统的稳定运行。 ### URL传参数中文乱码原因 URL传参数时出现中文乱码的主要原因在于字符编码的不一致。通常,Web...

    解决springmvc+mybatis+mysql中文乱码问题

    总结来说,解决Java中Spring MVC、MyBatis和MySQL中文乱码问题,需要对整个系统进行全方位的字符编码检查和设置,包括前端、后端、数据库以及代码本身。只要每个环节都按照UTF-8标准配置,中文乱码问题一般就能得到...

    Java 编程技术中汉字问题的分析及解决

    解决Java中的汉字问题,需要从源头(源代码编码)到终端(显示设备)的整个链路进行考虑,确保每个环节的编码转换正确无误。通过理解汉字编码的基本原理,结合Java的API,可以有效地预防和解决乱码问题,确保程序...

    基于Java过滤器实现的系统权限控制方法研究.pdf

    使用过滤器技术,将敏感词以配置文件形式作为过滤器参数,在用户提交数据时进行检测,发现问题内容及时丢弃,可以从源头上避免敏感词等脏数据进入系统。 * 系统权限控制:Web 应用用户角色复杂,页面非常多,在每个...

    jsp中文问题解决方案(完整版)

    【描述】:在Java应用程序开发中,处理中文乱码问题是一项常见的挑战,特别是在使用非Unicode编码如GB2312(包括GBK简体和Big5繁体)的环境中。正确展示中文和在数据库中存储中文是基础需求。本文将提供一个完整的...

    DF对比软件

    这对于理解和审查代码更改,以及回溯问题的源头非常有帮助。 2. **颜色高亮显示**:在对比过程中,可能会用不同的颜色来标识新增、删除和修改的代码,使得视觉对比更加直观。 3. **合并冲突解决**:如果多个开发者...

    IO流讲解-LingRan.pptx

    输入流负责从源头读取数据,而输出流则负责向目标位置写入数据。 字节流和字符流是IO流的主要类型。字节流处理的是8位的字节数据,包括`InputStream`和`OutputStream`的子类,如`FileInputStream`和`...

    简单易懂讲IO(csdn)————程序.pdf

    流式IO是Java中处理输入输出的基本机制,它通过构建输入流和输出流,将数据从一个源头(如文件、网络连接等)读取,并输出到目的地(如屏幕、文件等)。Java提供了两种主要的流类型:字节流和字符流。 1. 字节流:...

    处理中文字符串的函数

    - 如果可能,应考虑在源头就使用UTF-8或其他支持多语言的统一编码方式,以减少编码转换的步骤。 - 对于现代Web开发而言,推荐使用UTF-8作为通用编码标准,因为它可以支持全球范围内的所有字符集,并且在大多数现代...

Global site tag (gtag.js) - Google Analytics