文档章节

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

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

码上生花,ECharts 作品展示赛正式启动!>>>

在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
成都
私信 提问
加载中
请先登录后再评论。
HTTP之request请求(注册)

HTTP之request请求 request:请求 作用:获取浏览器发送过来的数据 操作请求行 常用方法:HttpServletRequest 案例1:请求头的方法   web.xml的配置 <?xml version="1.0" encoding="UT......

osc_d5c6tuv9
2019/06/11
2
0
navicat for mysql 在eclipse console中文显示乱码

query = db.query("SELECT * from yqpt_event_info_today") puts "there are #{query.num_rows} rows returned" query.each_hash do |h| puts h.inspect end eclipse的 console中文显示乱码。......

girlnotboy
2013/04/18
1.4K
2
DOS命令的一些技巧总结(大纲)

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

述而不作
2012/02/29
142
0
Eclipse 项目run时 Console控制台输出中文乱码问题的解决方法

先上结论(此乱码原因):log日志配置编码和运行时编码不一致造成的。两者只要一致,就不会出现乱码,不管设置UTF-8还是GBK;(具体做法见下面总结) 总结下eclipse中编码设置: 1、工作区间:...

osc_y4l0tx8t
2019/05/13
6
0
eclipse控制台乱码的解决方法

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

霞女
2015/11/25
106
0

没有更多内容

加载失败,请刷新页面

加载更多

通过使用模块名称(字符串)来调用模块的功能 - Calling a function of a module by using its name (a string)

问题: What is the best way to go about calling a function given a string with the function's name in a Python program. 在Python程序中,给定带有函数名称的字符串的最佳方法是什么?......

javail
21分钟前
21
0
在JavaScript中生成随机字符串/字符 - Generate random string/characters in JavaScript

问题: I want a 5 character string composed of characters picked randomly from the set [a-zA-Z0-9] . 我想要一个由从[a-zA-Z0-9]随机挑选的字符组成的5个字符串。 What's the best wa......

fyin1314
51分钟前
12
0
在GitHub上将图像添加到README.md - Add images to README.md on GitHub

问题: Recently I joined GitHub . 最近我加入了GitHub 。 I hosted some projects there. 我在那里举办了一些项目。 I need to include some images in my README File. 我需要在README文件......

技术盛宴
今天
17
0
R语言笔记:用R语言绘制条形图

学“统计学”的人对R语言应该不会太陌生,近十年来,随着大数据时代的到来,把统计学和数据分析,R语言都带火了。虽然我本人会用Python的matplotlib和pyecharts,百度的Echarts,微软的Excel...

tengyulong
今天
29
0
字符串中全半角的不同

全角空格 数字表示 12288 半角空格 数字表示 32 一般string类中去掉空格的一般操作都是半角空格 /** * 去除字符串中所包含的空格(包括:空格(全角,半角)、制表符、换页符等) * @param s *...

飞雪无痕
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部