昆山去哪学java好_昆山JAVA培训

预约试听
编辑:佚名 发布时间:2018-10-23
昆山去哪学java好
其然IT公司简介

其然IT教育科技有限公司,是一家专注于培养高级IT技术 人才,为学员提供定制化IT职业规划方案及意见咨询服务的教育科技公司。秉着“全心全意为学员服务,认认真真做好教育工作,凡事多做一点,别太 计较得失”的企业文化,立志打造一个教学专业并紧跟当下流行前沿技术,让学员保持强有力的核心竞争力、在企业中具有真正实战能力,让更多有梦 想的年轻人学到实实在在有价值的知识,让知识真正改变命运的IT培训品牌。公司CEO不仅是明星讲师亦是知名独立框架开发者,其开发的2个世界通用 流行开源框架(MJRefresh、MJExtension),曾经在苹果开发github排名OC语言分类中领导全球排名。因其独特的个人魅力及一贯的坚守吸引了众多实战 派讲师纷纷加入,共同构造了小码哥与时俱进的教研团队。其然IT教育自成立以来硕果累累:陆续开设6大学科;累计培训几千名学员高薪就业;曾为 中国中央电视台CCTV发现之旅《华商论见》栏目组特约战略合作伙伴,双方在传媒、网络媒体、人才输送等方面拥有着广泛的合作。2015年下旬,其然 IT教育凭借其优良的口碑荣获“2015中国IT教育培训行业**具影响力领军品牌”、“2015年度互联网责任品牌”等多项大奖。

昆山去哪学java好

java入门要注意什么

昆山去哪学java好

学习java就像是一个种花的过程,不断地为其施肥浇水,它才会茁壮成长。 而我们学习java,就要不断的充实自己、提升自己,才能获得更多机会。很多开始学习java编程的小白,经常就会被概念、定义什么的搞糊涂。当分类 、对象、接口、构造函数等等各种专业名词出现的时候,你一定是脑子里好像一片空白,根本就搞不懂这些字眼的意思和关系,而且,这种情况下,很 容易导致你丧失自信心,开始逃避、拒绝,这些小白经常遇到的情况在我刚接触java的时候也遇见了,但是好在我足够幸运,遇见了诚筑说。我现在已 经是公司的项目经理了,今天,我为大家来总结了一些经验和建议,希望能够帮助到大家。

一点:熟练基本的j2seAPI

除去java语言本身的语法之外呢,要懂得并且熟练j2seAPI的API也是非常有 必要的,在这里,就建议大家首先去掌握字符串的处理、异常的处理、容器、输入输出、线程等,这些相对来说较为重要的。还有就是API的内容是非 常庞大的,关于API,一定要懂得查询API的文件说明,在了解了其作用用途或者目的才能够进行相对于的程序。

二点:稳固java的语法基础

学习java一定要学会使用java的程序语言,用来编写程序,但是学习程序语 言就要熟悉语法是怎么使用的。程序语言其实也是一种语言,不过跟人类的语言不同,这种语言是要和计算机沟通交流,那怎么做才能熟悉这种语言呢 ,我给出的建议是多看别人写的程序,了解人家是怎么用java来解决问题的。然后再找类似的程序去练习了,这样就能够从实际操作中检验自己是否真 的知道该怎么去解决问题了。

三点:加入贴吧论坛多参与讨论

根据我当时的经验,在大家学习的过程中,如果有人可以参与话题,共同讨 论的话,会加快你学习的速度。所以大家可以和我一样,找一个技术讨论的地方,贴吧啊,论坛啊都可以,在这里进行讨论,毕竟大家有着共同的目标 和理想,有着共同的话题可聊,这样的话,又大大节省了学习的时间。

学完基本的java语法呢,现在就该用java来进行实际的编程了,假如你需要 编写窗口程序,那就学Swing窗口设计;假如你要编写数据库什么的,那就学JDBC等等。

流行框架

昆山去哪学java好

流行框架

  • 01Struts2

    • 1.Struts2流程

    • 2.值栈与ONGL

    • 3.Struts2标签库

    • 4.Struts2模型驱动原理

    • 5.Struts2声明式异常处理

    • 6.Struts2类型转换&自定义类型转换

    • 7.Struts2拦截器原理&自定义拦截器

    • 8.Struts2源码分析&运行原理

  • 02Hibernate

    • 1.Hibernate环境搭建&配置

    • 2.hibernate.cfg.xml&主键生成策略

    • 3.Session核心方法

    • 4.ORM映射:单向/双向1-n映射

    • 5.ORM映射:基于主/外键映射&n-n

    • 6.检索策略&迫切左外连接

    • 7.Hibernate缓存机制

    • 8.QBC、HQL

    • 9.Session管理

  • 03Spring

    • 1.SpringIOC&DI机制

    • 2.Spring配置式组件管理

    • 3.Spring注解式自动装配

    • 4.Spring表达式语言

    • 5.SpringAOP&动态代理

    • 6.SpringJDBC使用

    • 7.Spring声明式事务

    • 8.Spring单元测试

    • 9.Spring源码分析

    • 10.Spring、Struts2、Hibernate整合

  • 04SpringMVC

    • 1.SpringMVC配置&运行流程

    • 2.SpringMVC数据绑定

    • 3.模型处理&@ModelAttribute

    • 4.RestFulCRUD

    • 5.表单标签&静态资源处理

    • 6.数据转换&格式化&JSR303数据校验

    • 7.HttpMessageConverter

    • 8.Ajax&国际化&文件上传**

    • 9.异常处理

    • 10.整合&父子容器

  • 05MyBatis

    • 1.MyBatis配置&查询数据

    • 2.MyBatis全局配置文件

    • 3.MyBatis映射文件

    • 4.关联查询,动态sql

    • 5.MyBatis缓存机制&整合ehcache

    • 6.MyBatis逆向工程

    • 7.MyBatis、Spring、SpringMVC整合

    • 8.MyBatis运行原理&源码分析

    • 9.MyBatis拦截器&插件开发

    • 10.分页插件&存储过程调用&自定义 TypeHandler

  • 06JPA

    • 1.JPA技术体系

    • 2.JPA注解

    • 3.JPA相关API

    • 4.JPA映射

    • 5.JPQL

    • 6.二级缓存

    • 7.Spring整合JPA

  • 07SpringData

    • 1.SpringData快速入门

    • 2.SpringData_Repository接口

    • 3.Repository查询规范

    • 4.@Query&@Modifying

    • 5.CrudRepository

    • 6.PagingAndSortingRepository

    • 7.JpaRepository

    • 8.JpaSpecificationExecutor

    • 9.自定义Repository

  • 08Maven

    • 1.Maven环境搭建

    • 2.Maven构建&自动化构建

    • 3.本地仓库&中央仓库

    • 4.maven创建web工程

    • 5.pom.xml、依赖管理

    • 6.坐标、依赖、生命周期等

    • 7.eclipse下的maven使用

    • 8.继承&聚合

    • 9.maven构建SSH/SSM应用

    • 10.自动部署&持续集成&持续部署

  • 09SVN

    • 1.SVN简介

    • 2.SVN服务器搭建

    • 3.SVN创建版本库

    • 4.Eclipse整合svn插件

    • 5.使用SVN更新提交

    • 6.SVN仓库分析

    • 7.SVN协同修改&冲突解决

    • 8.SVN权限管理

    • 9.SVN时光机

    • 10.TortoiseSVN

  • 10Shiro

    • 1.Shiro入门

    • 2.Spring集成Shiro

    • 3.Shiro工作流程

    • 4.权限URL配置

    • 5.认证流程&认证Realm

    • 6.密码比对,MD5&盐值加密

    • 7.授权流程

    • 8.标签&权限注解

    • 9.会话管理、SessionDao

    • 10.缓存

    • 11.实现”记住我”

  • 11Activiti5

    • 1.工作流&工作流引擎

    • 2.BPMN2.0规范

    • 3.Activiti5框架表结构

    • 4.Activiti5核心组件&服务接口

    • 5.Activiti5插件安装&整合Spring

    • 6.流程定义

    • 7.流程实例&任务&历史

    • 8.任务领取&流程变量

    • 9.排他网关&并行网关

  • 12WebService

    • 1.WebService简介

    • 2.WebService主流框架

    • 3.cxf的使用

    • 4.SOAP协议

    • 5.WSDL讲解

    • 6.JAX-WS

    • 7.与Spring整合

    • 8.JAXB

    • 9.JAX-RS

    • 10.支付接口原理

  • 13Linux

    • 1.Linux系统-基础

    • 2.Linux网络基础

    • 3.Linux在VMware下的安装

    • 4.Linux下Java环境的搭建

    • 5.Linux下Tomcat安装和配置

    • 6.Linux下 Oracle/MySQL 安装与配置

    • 7.Shell 编程

  • 14Redis

    • 1.NoSQL&Redis入门

    • 2.Redis/memcache/MongDB对比

    • 3.Redis安装&启动

    • 4.分布式数据库CAP原理

    • 5.Redis五大数据类型和基本操作命令

    • 6.Redis总体配置Redis.conf

    • 7.Redis持久化(RDB和AOF)

    • 8.Redis事务控制

    • 9.Redis发布和订阅

    • 10.Redis(Master/Slave)主从复制

    • 11.Jedis

  • 15Git&Git Hub

    • 1.Git安装配置

    • 2.Git本地库搭建

    • 3.Git常用操作命令

    • 4.Github注册与配置

    • 5.Github与Git协同办公

    • 6.TortoiseGit安装配置

    • 7.Egit操作push/pull,

    • 8.Git工作流

    • 9.集中式&GitFlow&Forking

  • 16MySQL高级

    • 1.MySQL架构组成

    • 2.MySQL备份和恢复

    • 3.MySQL查询和慢查询日志分析

    • 4.MySQL索引优化

    • 5.MySQL存储引擎优化

    • 6.MySQL锁机制优化

    • 7.MySQL高可用设计

    • 8.MySQL集群

  • 17JVM原理

    • 1.JVM简析

    • 2.JVM组成结构

    • 3.JVM堆、栈原理

    • 4.JVM-Heap三区原理

    • 5.JVM垃圾收集机制

    • 6.堆内存调优

    • 7.GC回收策略

    • 8.GC三大算法

  • 18Quartz

    • 1.Quartz作业调度简介

    • 2.Quartz作业调度执行以及持久性

    • 3.Quartz基本使用

    • 4.Quartz核心类讲解

    • 5.Quartz Trigger 触发器

    • 6.Quartz Job&JobDetail

    • 7.Quartz Calendars日历讲解

    • 8.JobListener监听器和TriggerListener监听器

    • 9.Spring整合Quartz

  • 19Nginx

    • 1.Nginx反向代理介绍

    • 2.Nginx **和安装

    • 3.Nginx 编译和启动、访问

    • 4.在Linux下搭建Nginx集群

    • 5.在Windows搭建Nginx集群

    • 6.解决Session共享问题

  • 20Java JUC 线程高级

    • 1.volatile 关键字

    • 2.内存可见性分析

    • 3.原子变量与CAS (Compare And Swap) 算法分 析

    • 4.ConcurrentHashMap 锁分段机制

    • 5.CountDownLatch 闭锁

    • 6.实现 Callable 接口

    • 7.Lock 同步锁

    • 8.Condition 控制线程通信

    • 9.线程按序交替

Java:Unicode简介(处理数据显示异常)


>

一般对于新手来说,由于对Unicode编码不够了解,所以数据编码异常是经常会碰到的问题。例如页面显示字符异常等

Unicode是一种字符编码规范 。 

    先从ASCII说起。ASCII是用来表示英文字符的一种编码规范,每个ASCII字符占用1个字节(8bits)      因此,ASCII编码可以表示的**大字符数是256,其实英文字符并没有那么多,一般只用前128个(**高位为0),其中包括了控制字符、数字、大小写字母和其他一些符号 。      而**高位为1的另128个字符被成为“扩展ASCII”,一般用来存放英文的制表符、部分音标字符等等的一些其他符号      这种字符编码规范显然用来处理英文没有什么问题 。(实际上也可以用来处理法文、德文等一些其他的西欧字符,但是不能和英文通用),但是面对中文、阿拉伯文之类复杂的文字,255个字符显然不够用      于是,各个国家纷纷制定了自己的文字编码规范,其中中文的文字编码规范叫做“GB2312-80”,它是和ASCII兼容的一种编码规范,其实就是利用扩展ASCII没有真正标准化这一点,把一个中文字符用两个扩展ASCII字符来表示。      但是这个方法有问题,**大的问题就是,中文文字没有真正属于自己的编码,因为扩展ASCII码虽然没有真正的标准化,但是PC里的ASCII码还是有一个事实标准的(存放着英文制表符),所以很多软件利用这些符号来画表格。这样的软件用到中文系统中,这些表格符就会被误认作中文字,破坏版面。而且,统计中英文混合字符串中的字数,也是比较复杂的,我们必须判断一个ASCII码是否扩展,以及它的下一个ASCII是否扩展,然后才“猜”那可能是一个中文字 。      总之当时处理中文是很痛苦的。而更痛苦的是GB2312是国家标准,台湾当时有一个Big5编码标准,很多编码和GB是相同的,所以……,嘿嘿。      这时候,我们就知道,要真正解决中文问题,不能从扩展ASCII的角度入手,也不能仅靠中国一家来解决。而必须有一个全新的编码系统,这个系统要可以将中文、英文、法文、德文……等等所有的文字统一起来考虑,为每个文字都分配一个单独的编码,这样才不会有上面那种现象出现。      于是,Unicode诞生了。      Unicode有两套标准,一套叫UCS-2(Unicode-16),用2个字节为字符编码,另一套叫UCS-4(Unicode-32),用4个字节为字符编码。      以目前常用的UCS-2为例,它可以表示的字符数为2^16=65535,基本上可以容纳所有的欧美字符和绝大部分的亚洲字符 。  UTF-8的问题后面会提到 。      在Unicode里,所有的字符被一视同仁。汉字不再使用“两个扩展ASCII”,而是使用“1个Unicode”,注意,现在的汉字是“一个字符”了,于是,拆字、统计字数这些问题也就自然而然的解决了 。      但是,这个世界不是理想的,不可能在一夜之间所有的系统都使用Unicode来处理字符,所以Unicode在诞生之日,就必须考虑一个严峻的问题:和ASCII字符集之间的不兼容问题。      我们知道,ASCII字符是单个字节的,比如“A”的ASCII是65。而Unicode是双字节的,比如“A”的Unicode是0065,这就造成了一个非常大的问题:以前处理ASCII的那套机制不能被用来处理Unicode了 。      另一个更加严重的问题是,C语言使用 /0 作为字符串结尾,而Unicode里恰恰有很多字符都有一个字节为0,这样一来,C语言的字符串函数将无法正常处理Unicode,除非把世界上所有用C写的程序以及他们所用的函数库全部换掉 。      于是,比Unicode更伟大的东东诞生了,之所以说它更伟大是因为它让Unicode不再存在于纸上,而是真实的存在于我们大家的电脑中。那就是:UTF 。      UTF= UCS Transformation Format UCS转换格式      它是将Unicode编码规则和计算机的实际编码对应起来的一个规则。现在流行的UTF有2种:UTF-8和UTF-16 。      其中UTF-16和上面提到的Unicode本身的编码规范是一致的,这里不多说了。而UTF-8不同,它定义了一种“区间规则”,这种规则可以和ASCII编码保持**大程度的兼容 。      UTF-8有点类似于Haffman编码,它将Unicode编码为00000000-0000007F的字符,用单个字节来表示;      00000080-000007FF的字符用两个字节表示      00000800-0000FFFF的字符用3字节表示      因为目前为止Unicode-16规范没有指定FFFF以上的字符,所以UTF-8**多是使用3个字节来表示一个字符。但理论上来说,UTF-8**多需要用6字节表示一个字符。      在UTF-8里,英文字符仍然跟ASCII编码一样,因此原先的函数库可以继续使用。而中文的编码范围是在0080-07FF之间,因此是2个字节表示(但这两个字节和GB编码的两个字节是不同的),用专门的Unicode处理类可以对UTF编码进行处理。      下面说说中文的问题。      由于历史的原因,在Unicode之前,一共存在过3套中文编码标准。      GB2312-80,是中国大陆使用的国家标准,其中一共编码了6763个常用简体汉字。Big5,是台湾使用的编码标准,编码了台湾使用的繁体汉字,大概有8千多个。HKSCS,是中国香港使用的编码标准,字体也是繁体,但跟Big5有所不同。      这3套编码标准都采用了两个扩展ASCII的方法,因此,几套编码互不兼容,而且编码区间也各有不同      因为其不兼容性,在同一个系统中同时显示GB和Big5基本上是不可能的。当时的南极星、RichWin等等软件,在自动识别中文编码、自动显示正确编码方面都做了很多努力 。      他们用了怎样的技术我就不得而知了,我知道好像南极星曾经以同屏显示繁简中文为卖点。      后来,由于各方面的原因,国际上又制定了针对中文的统一字符集GBK和GB18030,其中GBK已经在Windows、linux等多种操作系统中被实现。      GBK兼容GB2312,并增加了大量不常用汉字,还加入了几乎所有的Big5中的繁体汉字。但是GBK中的繁体汉字和Big5中的几乎不兼容。      GB18030相当于是GBK的超集,比GBK包含的字符更多。据我所知目前还没有操作系统直接支持GB18030。      谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词  这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较**地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级。整理这篇文章的动机是两个问题:      问题一:      使用Windows记事本的“另存为”,可以在GBK、Unicode、Unicode big endian和UTF-8这几种编码方式间相互转换。同样是txt文件,Windows是怎样识别编码方式的呢?      我很早前就发现Unicode、Unicode big endian和UTF-8编码的txt文件的开头会多出几个字节,分别是FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)。但这些标记是基于什么标准呢?      问题二:      **近在网上看到一个ConvertUTF.c,实现了UTF-32、UTF-16和UTF-8这三种编码方式的相互转换。对于Unicode(UCS2)、GBK、UTF-8这些编码方式,我原来就了解。但这个程序让我有些糊涂,想不起来UTF-16和UCS2有什么关系。查了查相关资料,总算将这些问题弄清楚了,顺带也了解了一些Unicode的细节。写成一篇文章,送给有过类似疑问的朋友。本文在写作时尽量做到通俗易懂,但要求读者知道什么是字节,什么是十六进制。      0、big endian和little endian      big endian和little endian是CPU处理多字节数的不同方式。例如“汉”字的Unicode编码是6C49。那么写到文件里时,究竟是将6C写在前面,还是将49写在前面?如果将6C写在前面,就是big endian。还是将49写在前面,就是little endian。      “endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。      我们一般将endian翻译成“字节序”,将big endian和little endian称作“大尾”和“小尾”。      1、字符编码、内码,顺带介绍汉字编码  字符必须编码后才能被计算机处理。计算机使用的缺省编码方式就是计算机的内码。早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。      GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。      GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。      从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的**高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。      有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。      这里还有一些细节:      GB2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0。      在DBCS中,GB内码的存储格式始终是big endian,即高位在前。      GB2312的两个字节的**高位都是1。但符合这个条件的码位只有128*128=16384个。所以GBK和GB18030的低字节**高位都可能不是1。不过这不影响DBCS字符流的解析:在读取DBCS字符流时,只要遇到高位为1的字节,就可以将下两个字节作为一个双字节编码,而不用管低字节的高位是什么。      2、Unicode、UCS和UTF      前面提到从ASCII、GB2312、GBK到GB18030的编码方法是向下兼容的。而Unicode只与ASCII兼容(更准确地说,是与ISO-8859-1兼容),与GB码不兼容。例如“汉”字的Unicode编码是6C49,而GB码是BABA。      Unicode也是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode Character Set"的缩写。      根据维基百科全书(http://zh.wikipedia.org/wiki/)的记载:历**存在两个试图独立设计Unicode的组织,即国际标准化组织(ISO)和一个软件制造商的协会(unicode.org)。ISO开发了ISO 10646项目,Unicode协会开发了Unicode项目。      在1991年前后,双方都认识到世界不需要两个不兼容的字符集。于是它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作。从Unicode2.0开始,Unicode项目采用了与ISO 10646-1相同的字库和字码。      目前两个项目仍都存在,并独立地公布各自的标准。Unicode协会现在的**新版本是2005年的Unicode 4.1.0。ISO的**新标准是10646-3:2003。      UCS规定了怎么用多个字节表示各种文字。怎样传输这些编码,是由UTF(UCS Transformation Format)规范规定的,常见的UTF规范包括UTF-8、UTF-7、UTF-16。      IETF的RFC2781和RFC3629以RFC的一贯风格,清晰、明快又不失严谨地描述了UTF-16和UTF-8的编码方法。我总是记不得IETF是Internet Engineering Task Force的缩写。但IETF负责维护的RFC是Internet上一切规范的基础。      3、UCS-2、UCS-4、BMP      UCS有两种格式:UCS-2和UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,**高位必须为0)编码。下面让我们做一些简单的数学游戏:      UCS-2有2^16=65536个码位,UCS-4有2^31=2147483648个码位。      UCS-4根据**高位为0的**高字节分成2^7=128个group。每个group再根据次高字节分为256个plane。每个plane根据第3个字节分为256行 (rows),每行包含256个cells。当然同一行的cells只是**后一个字节不同,其余都相同。      group 0的plane 0被称作Basic Multilingual Plane, 即BMP。或者说UCS-4中,高两个字节为0的码位被称作BMP。      将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。在UCS-2的两个字节前加上两个零字节,就得到了UCS-4的BMP。而目前的UCS-4规范中还没有任何字符被分配在BMP之外。      4、UTF编码      UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下:      UCS-2编码(16进制) UTF-8 字节流(二进制)      0000 - 007F 0xxxxxxx      0080 - 07FF 110xxxxx 10xxxxxx      0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx      例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 110001 001001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。      读者可以用记事本测试一下我们的编码是否正确。      UTF-16以16位为单元对UCS进行编码。对于小于0x10000的UCS码,UTF-16编码就等于UCS码对应的16位无符号整数。对于不小于0x10000的UCS码,定义了一个算法。不过由于实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以认为UTF-16和UCS-2基本相同。但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。      5、UTF的字节序和BOM      UTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如收到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是“奎”还是“乙”?      Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一个有点小聪明的想法:      在UCS编码中有一个叫做"ZERO WIDTH -BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH -BREAK SPACE"。      这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH -BREAK SPACE"又被称作BOM。      UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH -BREAK SPACE"的UTF-8编码是EF BB BF(读者可以用我们前面介绍的编码方法验证一下)。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。      Windows就是使用BOM来标记文本文件的编码方式的。 

java 的乱码解决方法 统一编码UTF-8

一、介绍两个类 URLEncoder//编码 URLDecoder//解码 看看下面的测试输出,你就明白是做什么的了 import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; public class main {  public static void main(String[] args) throws UnsupportedEncodingException{   System.out.PRintln("UTF-8");   String a = URLEncoder.encode("中文测试", "UTF-8");//编码   System.out.println(a);   System.out.println(URLDecoder.decode(a,"UTF-8"));//还原   //下面同理   System.out.println("/nGBK(百度就是用这种)");   a = URLEncoder.encode("中文测试", "GBK");   System.out.println(a);   System.out.println(URLDecoder.decode(a,"GBK"));  } } [输出] UTF-8 中文测试 中文测试 GBK(百度就是用这种)

抢限时体验课

相关推荐

猜你喜欢

同类学校

Copyright © 2006-2018 kaoshi.china.com