我们经常会遇到编码问题。Java号称国际化的语言,是因为它的class文件采用UTF-8,而JVM运行时使用UTF-16(至于为什么JVM中要采用UTF-16,我没看过 相关的资料,但我猜可能是因为JAVA里面一个字符(char)就是16位的,而UTF-16正是双字节编码),都是unicode的编码。
unicode 的目标就是能支持世界上所有的字符集,也就是说几乎所有的字符集包含的字符在unicode中都有对应的编码。在unicode中,字符与代码的映射关 系,就是unicode字符集,称为UCS(Unicode Character Set),每个unicode字符编码称为code point(代码点?)。UTF-8和UTF-16是不同的UCS编码方法,UTF就是UCS Transformation Format。;
在Java 中,String的getBytes()方法就是对特定的字符串(unicode)按照给定的字符集进行编码(encode),new String()则可以按照某个字符集将字节流转换回unicode(decode)。Java里面的每一个String都是unicode编码。
再来看页面,如果不做特殊处理,Form的提交就按照页面的ContentType设置中的字符集进行编码转换,发送到后台,后台必须利用req.setCharacterEncoding来指定参数的编码格式(不同的应用服务器应有不同的指定方式),才能正确解码。
Java 里面的encode和decode都是相对于unicode而言的,encode的意思是将char[] --> XXX Encoding byte[],decode就是由XXX Encoding byte[] --> char[]。平常,当我们说“将GBK编码转换为UTF-8编码”的时候,实际的意思就是:GBK Encoding byte[] --> UTF-8 Encoding byte[],这种转换只有在需要用byte[]传输数据的时候才有意义,否则便是毫无意义的。
首先要说明的一点是:Java中的String对象就是一个unicode编码的字符串。
但是,我们通常会听到有人说:“我们需要将String由ISO-8859-1转换为GBK编码”,这又是怎么回事呢?实际上,我们并不是要“将 一个由ISO-8859-1编码的String转换为GBK编码的String”,反复说明的是,JAVA中的String都是unicode编码的,所以不存在“ISO- 8859-1编码的String”或“GBK编码的String”这样的说法。而需要转换的唯一的原因是String进行了错误的编码。我们经常会碰到由ISO-8859- 1转换为诸如GBK/UTF-8等等这样的需求。所谓的转换过程是:String --> byte[] -->String。
也许 你非常清楚这个过程的代码:new String(text.getBytes("ISO-8859-1"),"GBK")。但是,要真正理解起来并不是那么简单。表面上看似乎很容易理解, 不就是将text String对象按照ISO-8859-1的方式编码为byte[]然后再把它按照GBK的方式转换为String吗?但是这句代码很容易会被误解为: “将text String由ISO-8859-1转换为GBK编码”,这种说法是错误的。难道你见过用这样的代码:new String(text.getBytes("GBK"),"UTF-8")来对String进行编码转换的吗?
之所以你会经常看到new String(text.getBytes("ISO-8859-1"),"GBK")这句代码,是因为一个GBK的字节流被错误地以ISO-8859- 1的方式转换为String(unicode)了!发生这种情况最普遍的地方是一个GBK编码的网页向后台提交数据的时候,就有可能会看到这句代码的出 现。GBK的流被错误的当成ISO8859-1的流,所以便得到了一个错误的String。由于ISO8859-1是单字节编码,所以每个字节被按照原样 转换为String,也就是说,虽然这是一个错误的转换,但编码没有改变,所以我们仍然有机会把编码转换回来!所以那句经典的new String(text.getBytes("ISO-8859-1"),"GBK")便出现了。
如果系统误以为是其它编码格式,就有可能再也转换不回来了,因为编码转换并不是负负得正那么简单的
相关推荐
中文字符在Unicode中的表示通常是一个或两个字节,对于简体中文,大部分字符的码点位于Unicode的 BMP(基本多文种平面)内,即U+4E00到U+9FFF之间。 在Java中,Unicode编码主要通过字符串对象的`char`类型来实现。...
在IT领域,尤其是在Java编程中,Unicode编码是一个极为重要的概念,它确保了全球各种语言的文字能够在计算机系统中正确地表示、存储和传输。Unicode是一种国际化的字符编码标准,旨在为世界上所有的字符提供唯一的...
这种方式既保持了ASCII编码的兼容性,又能够高效地表示Unicode中的所有字符。 下面是UTF-8编码规则的一个示例: | Unicode范围 | 字节数 | 编码规则 | |-----------------|------|-------------------------------...
浅谈Java中Unicode的编码和实现 Java 编程中 Unicode 编码及实现的相关内容是 Java 开发者需要了解的重要知识点。本文将向大家介绍 Unicode 编码系统的编码方式和实现方式两个层次。 编码方式 Unicode 编码系统可...
Java显示Unicode特殊字符, protected char base; // 指定我们显示的初始值7 protected Font font = new Font("serif", Font.PLAIN, 18); // 指定缺省的显示字体 protected Font headingfont = new Font(...
Java反编译与Unicode字符转换是Java开发过程中两个重要的技术环节。反编译是指将已编译的字节码(.class文件)转换回源代码的过程,这对于理解已有的类库或者进行逆向工程非常有用。Unicode是国际通用的字符编码标准,...
中文字符在Unicode编码中通常是以四个十六进制数字来表示的,其形式为\uXXXX(X代表一个0-9或a-f的数字),比如中文“中”在Unicode中的编码为\u4e2d。 在Java中,字符以Unicode编码存储,因此大多数情况下,开发...
在Java编程语言中,处理Unicode编码和十六进制字符转换是一项常见的任务,特别是在处理文本数据时。本示例探讨了如何使用Java实现从Unicode十六进制字符串到中英文字符的转换,以及反过来的过程。理解Unicode和UTF...
"Java实现中文字符串与unicode互转工具类" Java实现中文字符串与unicode互转工具类是指使用Java语言实现中文字符串与unicode码之间的相互转换。这个工具类主要用于解决中文字符串与unicode码之间的转换问题,提供了...
以下是对Java中编码方式和Unicode的知识点总结: 1. 基本概念 - bit:计算机存储的最小单位,只能是0或者1。 - byte:一个字节是8个bit,计算机表示的基本单位。 - 字节换算:1KB(千字节)= 1024字节,1MB(兆字节...
Java编写的Unicode编码转换器是一种实用工具,它能够帮助用户将各种国家和地区的文字转换成Unicode编码,同时也能实现从Unicode编码回转到原始字符。Unicode是一种国际标准,旨在为全球所有的字符提供一个统一的编码...
java对汉字理得unicode 编码与解码处理
Java是一种广泛使用的编程语言,它的灵活性和跨平台性使其在处理文本转换任务时也非常...在开发过程中,确保正确处理字符编码,理解Unicode和Java的文本处理机制,以及选择合适的工具或库,是成功实现此功能的关键。
在Java编程语言中,Unicode是一种广泛使用的字符编码标准,它能表示世界上几乎所有的文字系统,包括汉字、拉丁字母、希腊字母、符号等。"Java1Unicode_java_accountdut_"这个标题可能指的是一个Java项目,该项目专门...
java 中文转成unicode!!! java unicode转成中文!!!
在Java编程语言中,Unicode是一种广泛使用的字符编码标准,它能表示世界上几乎所有的字符和符号。Unicode转码通常涉及到将Unicode编码的字符串转换为特定字符集,如GBK、UTF-8或简体中文等。本实例主要讲解如何将...
这里提供一个能转换十进制和十六进制unicode的java的util类,我们经常会遇到乱码问题,比如在后端与前端交互的时候,由于框架的种种原因,导致乱码,这时候就用到了unicode(万能码),在乱码前转为unicode,就可以...
在Java中,基本数据类型包括整型(如`byte`, `short`, `int`, `long`)、浮点型(如`float`, `double`)、布尔型 (`boolean`) 和字符型 (`char`)。 #### 字符型 (`char`) 字符型用于存储单个Unicode字符。Unicode是...
在 Java 中,实现中文字符按 Unicode 排序是一件非常重要的事情,特别是在处理中文字符串时。今天,我们将探讨如何使用 Java 语言来实现中文字符按 Unicode 排序。 在 Java 中,String 类提供了默认的比较方案,...