文档章节

乱码之一 eclipse console 和 xp console 乱码 全程详解(一)

 独行侠
发布于 2016/04/13 13:23
字数 1004
阅读 38
收藏 0

在java开发中,如果项目中有中文,乱码的问题会经常的遇到。而这个问题,并且经常困扰大家。最近元旦,manager都休假,我就花了点点时间,去仔细的研究了一下,乱码的问题以及根源。
先说,我们常用的编码格式(charset):

1)iso8859-1,这个是一种单字节的编码,也就是其利用了ascii码以及其他没有被利用到的0-255之间的其他的字节,来对数据进行编码

2)gbk 汉字内码扩展规范,兼容gb2312是一种双字节编码。即对于每个字符,都用两个字节来表示。

3)utf-8  是UNICODE的一种变长字符编码又称万国码。

具体以上三个之间的转码关系,或者是一个汉字对应的三个之间的编码,可以搜索一下,资料很多。我下面主要说一下乱码的原因。

所有的数据的保存,以及传输都是二进制数据,但是这种二进制与人类可识别的各种文字符号之间,并不是一 一对应的,这取决于所采用的编码,即把一个可见字符,通过某种编码,以一个或者多个字节来替代,并进行保存和传输。我们通常在notepad或者ue里面看到的,不论是中文或者是英文,都只是将保存在硬盘的二进制数据,通过某种已知的或者已经确定的编码进行解码,然后输出到显示器,方便我们自己查看。


文字符号--(encode)-->binary--(decode)-->文字符号.当encode与decode所采用的charset不一致的时候就会出现乱码问题。


针对于java开发,所见的文件有两种,java  code source file和java class file。

先说java code source file的编码问题,通常我们直接用记事本,写一个HelloWorld.java文件,然后保存,它默认用的是系统的编码,比如GBK.
然后通过javac HelloWorld.java编译得到class file.

那么其中第一个乱码产生之一就是HelloWorld.java的编码.

public class HelloWorld{    
    public static void main(String[]args){
        String chineseChar="汉";
        System.out.println(chineseChar);
        }
}


将其用notepad保存为默认格式,然后用十六进制的软件或者ue打开(关闭所有的格式自动转换和检测),如果你能够在HelloWorld.java的十六进制格式中找到BA BA那么这个source file以GBK或者兼容的格式保存的,而如果是E6 B1 89那么则是用UTF-8保存的(“汉”的GBK编码为BABA,UTF-8编码为E6 B1 89),此时我们如果要准确的编译为class文件,则要指定源文件的编码格式

            即javac -encoding GBK  HelloWorld.java (如果看到的是BA BA)或者javac -encoding UTF-8  HelloWorld.java(看到的是E6 B1 89),那么我们再执行java HelloWorld即可在控制台看到输出的“汉”字。

当然,这个指的是你的电脑的环境是默认charset如果为GBK(及其兼容模式),才会正常输出,否则,将仍然会出现乱码。(具体原因稍后解释).


小结一:

        a)上面如果是UTF-8的文件,用javac -encoding GBK  HelloWorld.java编译或者反过来,都会出错,这个就是我们经常在eclipse遇到的,在某个class因为有中文的comments而不能保存的错误。

        b)在eclipse中不论你对项目指定了UTF-8或者是GBK,那么它对应的源文件以及在编译时用的charset默认都是一样的,所以不会现编译时的乱码或者不能保存的问题,一般比较多的出现此类问题是当你导入一个不是你当前的eclipse环境创建的项目的时候,才会出现(如何避免,后面也会提到)。


© 著作权归作者所有

共有 人打赏支持
粉丝 1
博文 19
码字总数 9797
作品 0
成都
DOS命令的一些技巧总结(大纲)

1.设置dos启动的默认路径 安全模式登录(开机启动按F8),依次右键单击我的电脑--管理--本地用户和组-用户--administrator--配置文件--本地路径--输入“C:WINDOWSsystem32”,这样我们就能使...

述而不作
2012/02/29
0
0
eclipse控制台乱码的解决方法

乱码!Eclipse 的控制台console必须用GBK编码。 Eclipse 的控制台必须用GBK编码。所以条件1和条件4必须同时满足否则运行的还是乱码。才能保证不是乱码。 条件1,Window | Preferences | Work...

霞女
2015/11/25
99
0
phpstorm奇怪的问题?

告别了越来越臃肿的Eclipse,最近在学习使用JetBrains的IDE(如Intellij idea PhpStorm),感觉界面还是挺不错的,启动运行都很流畅。用惯了Eclipse,好多快捷键都不同了,稍微有点不习惯,但...

iman123
2013/12/20
2.2K
3
cmd命令行中logcat输出日志中文乱码

http://www.6san.com/913/ 在命令行使用adb logcat命令直接输出日志中文内容显示乱码,原因是中文系统中cmd命令行窗口默认的编码是GBK,而LogCat打印的日志是UTF-8编码,所以adb logcat命令输...

塔塔米
2014/01/30
0
0
DOS命令下使用sqlite3 命令中文乱码的解决办法

1、退出dos 或者重新开启在CMD窗口,输下:chcp 65001 然后回车确定 注意 65001 是Unicode (UTF-8) 65001 的编码设置,Chinese Simplified (GB2312) 的设置为936 ,可以从EditPlus 工具的菜单...

tianlonn
2014/04/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

八种排序算法的时间复杂度复杂度

1、稳定性 归并排序、冒泡排序、插入排序。基数排序是稳定的 选择排序、快速排序、希尔排序、堆排序是不稳定的 2、时间复杂度 最基础的四个算法:冒泡、选择、插入、快排中,快排的时间复杂度...

陈刚生
20分钟前
1
0
大数据学习系列 Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

目录 引言 目录 一、环境选择 1,集群机器安装图 2,配置说明 3,下载地址 二、集群的相关配置 1,主机名更改以及主机和IP做相关映射 2,ssh免登录 3,防火墙关闭 4,时间配置 5,快捷键设置...

董黎明
34分钟前
1
1
六元一个的私有博客系统,了解一下?

神说要有光,于是便有了光 写代码的,偶尔都想装点逼,想要自己写点博客。刚开始还能在各大社区写,比如说CSDN,开源中国,博客园什么的。但是越写就会越觉得,那些博客平台都不是自己想要的...

耒耒耒耒耒
39分钟前
1
0
maven环境隔离

一.maven项目环境根据实际情况进行隔离: 开发环境 dev 测试环境 beta 线上环境 prod 二.pom 配置: build节点 <build> <resources> <resource> <directory>src/......

imbiao
39分钟前
1
0
webrtc收包流程源码分析

版本: webrtc M59 收包流程: AsyncUDPSocket::OnReadEvent AllocationSequence::OnReadPacket HandleIncomingPacket UDPPort::OnReadPacket Connection::OnReadPacket P2PTransportChannel......

bill_shen
41分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部