博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
eclipse中的乱码问题
阅读量:6874 次
发布时间:2019-06-26

本文共 2477 字,大约阅读时间需要 8 分钟。

  

在新建项目或导入工程时常常遇到的问题:

1.导入工程后,Java文件中文乱码

  项目右键--Properties--Resource(快捷键Alt+Enter),在Text file encoding中默认的编译语言是GBK,选择源项目需要的编译语言,中文乱码一般是utf-8。这种方法修改的是此项目的编译语言。

   如果通过菜单中的File--Properties,Resource设置的是eclipse的默认编程语言。

  还可参考:https://blog.csdn.net/ordinaryprogrammerc/article/details/83013710

2.Java的web项目中jsp文件在运行时中文乱码

  这一般是因为我们在新建.jsp文件时,默认编写字符集的格式是:ISO-8859-1时,出现的中文乱码。

   
  
解决的方式一:编写index.jsp文件时,将其字符集改为UTF-8,并且网页显示的pageEncoding=UTF-8.如下图所示。
   

  解决方式二: 

  先进Window——preferences——General——Workspace——Text file encoding修改为other选项,然后设置自己需要的编码格式。
  在Eclipse中的Window——preferences——Content Type——Text——JSP会显示Defalut encoding 将其改为自己需要的编码格式即可。
  
解决方式三:
  修改tomcat/bin/catalina.sh文件,在JAVA_OPTS变量后新增以下参数:-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8,然后重启tomcat即可。
 3.编码格式简析
  
字符编码发展简史:https://blog.csdn.net/dk_0520/article/details/70157426
       概括来讲:
       (1)计算机由美国发明,他们的语言为英文,所以计算机编码也是使用的英文字符,也就是最初的ASCII(美国信息交换标准代码),它为7位,可编码2
7=128个字符。
       (2)计算机不断发展,人们又填入了横线、竖线等的符号,所以128-255称为“扩展字符集”;
       (3)计算机发展至中国,中国人们为了加入汉字,重新进行编码,保留了ASCII的前127个字符,后采用2Byte继续编码,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的”全角”字符,而原来在127号以下的那些就叫”半角”字符了。这就是我们所说的
GB2312.
       (4)继续扩展之后的编码方案被称为 
GBK 标准,GBK 包括了 GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。后来少数民族也要用电脑了,于是我们再扩展,又加了几千个新的少数民族的字,
GBK 扩成了 
GB18030
       (5)后来,因为当时各个国家都像中国这样搞出一套自己的编码标准,结果互相之间谁也不懂谁的编码,谁也不支持别人的编码。就在这时,
ISO (国际标谁化组织)决定着手解决这个问题。他们采用的方法很简单:废了所有的地区性编码方案,重新搞一个包括了地球上所有文化、所有字母和符号的编码!他们打算叫它”Universal Multiple-Octet Coded Character Set”,简称 UCS, 俗称 “
UNICODE”。
        (6)UNICODE 来到时,一起到来的还有 的兴起,UNICODE 如何在网络上传输也是一个必须考虑的问题,于是面向传输的众多 UTF(UCS Transfer Format)标准出现了,
UTF8 就是每次8个位传输数据,而
 UTF16 就是每次16个位,只不过为了传输时的可靠性,从UNICODE到 UTF时并不是直接的对应,而是要过一些 和规则来转换。
 
  
为什么将字符集格式从:ISO8859-1改成UTF-8就不会出现中文乱码呢?
  因为ISO8859-1属于单字节编码,最多能表示的字符范围是0-255,应用于英文系列。比如,字母a的编码为0x61=97。
  很明显,iso8859-1编码表示的字符范围很窄,无法表示中文字符。但是,由于是单字节编码,和计算机最基础的表示单位一致,所以很多时候,仍旧使用iso8859-1编码来表示。而且在很多协议上,默认使用该编码。比如,虽然”中文”两个字不存在iso8859-1编码,以gb2312编码为例,应该是”d6d0 cec4”两个字符,使用iso8859-1编码的时候则将它拆开为4个字节来表示:”d6 d0 ce c4”(事实上,在进行存储的时候,也是以字节为单位处理的)。而如果是UTF编码,则是6个字节”e4 b8 ad e6 96 87”。很明显,这种表示方法还需要以另一种编码为基础。
  UTF字符集考虑到unicode编码不兼容iso8859-1编码,而且容易占用更多的空间:因为对于英文字母,unicode也需要两个字节来表示。所以unicode不便于传输和存储。因此而产生了utf编码,utf编码兼容iso8859-1编码,同时也可以用来表示所有语言的字符,不过,utf编码是不定长编码,每一个字符的长度从1-6个字节不等。另外,utf编码自带简单的校验功能。一般来讲,英文字母都是用一个字节表示,而汉字使用三个字节。
注意,虽然说utf是为了使用更少的空间而使用的,但那只是相对于unicode编码来说,如果已经知道是汉字,则使用GB2312/GBK无疑是最节省的。不过另一方面,值得说明的是,虽然utf编码对汉字使用3个字节,但即使对于汉字网页,utf编码也会比unicode编码节省,因为网页中包含了很多的英文字符。

 

转载于:https://www.cnblogs.com/yankeshangxing/p/10510289.html

你可能感兴趣的文章
52. N-Queens II
查看>>
【Mongodb】3.X 配置身份验证
查看>>
云计算就像马拉松 京东CTO为啥这么说
查看>>
「每天一道面试题」Java虚拟机为新生对象分配内存有哪两种方式?
查看>>
海信电器于芝涛:坚守画质 才是消费者首选
查看>>
直播竞答必读:一定要提前知道的技术坑和新玩法
查看>>
React 中集成 Markdown编辑器
查看>>
Spring Boot 最佳实践(五)Spring Data JPA 操作 MySQL 8
查看>>
由三道题引伸出来的思考
查看>>
React 开发实战(一)- Repeat 组件
查看>>
小程序云开发全套实战教程(最全)
查看>>
单页引用中使用百度地图
查看>>
对 PHP 中依赖注入和控制反转的理解
查看>>
springMVC原理
查看>>
[Python3网络爬虫开发实战] 2-爬虫基础 3-爬虫的基本原理
查看>>
Java IO输入输出及乱码问题
查看>>
Linux服务器配置——简介
查看>>
react项目中使用mocha结合chai断言库进行单元测试
查看>>
nfs
查看>>
Angular vs React 最全面深入对比
查看>>