文档章节

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

 独行侠
发布于 2016/04/13 13:23
字数 1004
阅读 36
收藏 0
点赞 1
评论 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

eclipse控制台乱码的解决方法

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

霞女 ⋅ 2015/11/25 ⋅ 0

phpstorm奇怪的问题?

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

iman123 ⋅ 2013/12/20 ⋅ 3

cmd命令行中logcat输出日志中文乱码

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

塔塔米 ⋅ 2014/01/30 ⋅ 0

DOS命令下使用sqlite3 命令中文乱码的解决办法

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

tianlonn ⋅ 2014/04/11 ⋅ 0

mac myeclipse console乱码

现象一:直接执行tomcat的startup.sh,日志里无乱码,正常显示中文。 现象二:在Myeclipse里以java application方式执行文件,console打印出来的中文也是正常的。 现象三,即问题: 在myecl...

jinceon ⋅ 2014/02/26 ⋅ 1

怎么设置koala的eclipse插件

@Koala考拉 你好,想跟你请教个问题:在console中显示出现乱码

草泥马二号 ⋅ 2014/10/30 ⋅ 3

请问 Idea 下 version control console 里面乱码如何解决

@zhdan 你好,想跟你请教个问题:您之前遇到过的 Idea 下 version control console 里面乱码问题,是如何解决的? (图一) ==============================================================...

覃长城 ⋅ 2015/07/17 ⋅ 3

在VScode中改变cmd的编码和字体

在node.js的调试过称中,经常需要在终端中使用console.log()输入一些变量,然而windows的cmd默认是GBK编码,在调试的过程中会出现乱码: 上面的图片中正常输出应该是“你好” 幸好VScode提供...

cloes ⋅ 2016/11/09 ⋅ 0

字符集与编码(六)——getBytes方法及乱码初步

在前一篇里我们谈了Unicode的代码单元及string.length,现在接着前面的讨论继续谈string.getBytes()方法并对乱码的产生作初步分析。 string.getBytes方法 首先声明一下,以下讨论如无特别说明...

国栋 ⋅ 2014/09/12 ⋅ 9

没有更多内容

加载失败,请刷新页面

加载更多

下一页

在java中读取文件(也支持读取jar中的文件)

getClass().getResourceAsStream("文件名.格式"); 这个方法是用于获取当前类所在目录下的文件;需要将文件放到和当前类同一个包下面 比如我有个类在 com.test这个包下, 要读取一个test.jpg的图...

太黑_thj ⋅ 51分钟前 ⋅ 0

CentOS 7 源码编译安装 MySQL 5.7记录

没事瞎折腾,本来可以yum安装,却偏偏去要编译源码。 1. 安装依赖包 1). 安装cmake等依赖 # yum install cmake ncurses ncurses-devel bison bison-devel 2). 安装boost 1.59.0 # wget htt...

admin_qing ⋅ 53分钟前 ⋅ 0

tcp/ip详解-链路层

简介 设计链路层的目的: 为IP模块发送和接收IP数据报 为ARP模块发送ARP请求和接收ARP应答 为RARP模块发送RARP请求和接收RARP应答 TCP/IP支持多种链路层协议,如以太网、令牌环往、FDDI、RS-...

loda0128 ⋅ 今天 ⋅ 0

spring.net aop代码例子

https://www.cnblogs.com/haogj/archive/2011/10/12/2207916.html

whoisliang ⋅ 今天 ⋅ 0

发送短信如何限制1小时内最多发送11条短信

发送短信如何限制1小时内最多发送11条短信 场景: 发送短信属于付费业务,有时为了防止短信攻击,需要限制发送短信的频率,例如在1个小时之内最多发送11条短信. 如何实现呢? 思路有两个 截至到当...

黄威 ⋅ 昨天 ⋅ 0

mysql5.7系列修改root默认密码

操作系统为centos7 64 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动时不对密码进行验证 2、重启 mysqld 服务:systemctl restart mysql...

sskill ⋅ 昨天 ⋅ 0

Intellij IDEA神器常用技巧六-Debug详解

在调试代码的时候,你的项目得debug模式启动,也就是点那个绿色的甲虫启动服务器,然后,就可以在代码里面断点调试啦。下面不要在意,这个快捷键具体是啥,因为,这个keymap是可以自己配置的...

Mkeeper ⋅ 昨天 ⋅ 0

zip压缩工具、tar打包、打包并压缩

zip 支持压缩目录 1.在/tmp/目录下创建目录(study_zip)及文件 root@yolks1 study_zip]# !treetree 11└── 2 └── 3 └── test_zip.txt2 directories, 1 file 2.yum...

蛋黄Yolks ⋅ 昨天 ⋅ 0

聊聊HystrixThreadPool

序 本文主要研究一下HystrixThreadPool HystrixThreadPool hystrix-core-1.5.12-sources.jar!/com/netflix/hystrix/HystrixThreadPool.java /** * ThreadPool used to executed {@link Hys......

go4it ⋅ 昨天 ⋅ 0

容器之上传镜像到Docker hub

Docker hub在国内可以访问,首先要创建一个账号,这个后面会用到,我是用126邮箱注册的。 1. docker login List-1 Username不能使用你注册的邮箱,要用使用注册时用的username;要输入密码 ...

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部