java......关于编码

引入编码的原因:计算机只能存储二进制数。所以要存放字符,就要存放对应码表数字的二进制数。

并不是直接存入对应的字符轮廓。显示的时候也是将二进制数转换为十进制数字,去查找对应码表

来进行解码。

ASCII:第一张码表,只兼顾了拉丁字符和常用符号

a--97 z--122 A--65 Z--90

0--48 1--49  9--57

该码表一共有128对,0-127的数字,每个数字代表一个字符。一个字符代表一个字节。

该码表对应7位二进制数,但计算机处理的基本单位是一个字节,也就是8位,因此最高位都用0来代替。

后来字符不够用,就将其扩充128个字符,也就是256字符。最高位都是1。将其称为扩展ASCII码。

gb2312:中国自己制定的码表,0-127数字是ASCII编码,之后就是一些中文字符,其中也包含ASCII码中原有的一些符号,但这些符号都占用了两个字节,

就是常说的“全角“符号,ASCII码中的就叫做”半角“字符。该码表包含简体中文。

gbk:也是中国的码表,在gb2312的基础上。包含繁体字。

gb18030:在gbk的基础上,囊括了大多数少数民族常用字符。

在以上中国码表中,数字字母均为1个字节,汉字为两个字节。

unicode:也叫万国码。包含世界上大多数文字。java的默认码表,它是16位的码表。在java中是用两个字节来表示一个字符。

对于ASCII里的那些“半角”字符,unicode保持其原编码不变,只是将其长度由原来的8位扩展为16位,而其他文化和语言的字符则全部重新统一编码。

由于unicode规定所有字符占两个字节,原本英文字符在ASCII码中只需要一个字节就能存储,现在确需要浪费一半的空间来存储,对资源是一种极大的浪费。

utf-8:是在互联网上使用最广的一种unicode的实现方式,这是为传输而设计的编码,并使编码无国界,UTF-8是一种可变的编码方式。

它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度,当字符在ASCII码的范围时,就用一个字节表示,

保留了ASCII字符一个字节的编码做为它的一部分,UTF-8一个中文字符占3个字节。从unicode到uft-8并不是直接的对应,而是要过一些算法和规则来转换。

在以上码表中中文所对应的二进制数不都相同,因此可以得出中文乱码产生的根本原因就是编码和解码用了不同的码表。

字节的是byte,位是bit,1 byte = 8 bit ,也就是一个字节有8位。

“字节”是一个8位的物理存储单元,而“字符”则是一个文化相关的符号。

时间: 2024-10-13 06:30:30

java......关于编码的相关文章

java字符编码详解

引用自:http://blog.csdn.net/jerry_bj/article/details/5714745 GBK.GB2312.iso-8859-1之间的区别 GB2312,由中华人民共和国政府制定的,简体汉字编码规范,大陆所有计算机中的简体中文,都使用此种编码格式.目前,我也不知道还有另外的简体汉字编码规范.与此对应的还有BIG5,是中华民国政府制定的,繁体汉字的编码规范,一般应用于海外计算机的繁体中文显示.所谓的繁体中文Windows,简体中文Windows,指的就是采用BIG5和

【字符编码】Java字符编码详细解答及问题探讨

一.前言 继上一篇写完字节编码内容后,现在分析在Java中各字符编码的问题,并且由这个问题,也引出了一个更有意思的问题,笔者也还没有找到这个问题的答案.也希望各位园友指点指点. 二.Java字符编码 直接上代码进行分析似乎更有感觉.   运行结果:   说明:通过结果我们知道如下信息. 1. 在Java中,中文在用ASCII码表示为3F,实际对应符号'?',用ISO-8859-1表示为3F,实际对应符号也是为'?',这意味着中文已经超出了ASCII和ISO-8859-1的表示范围. 2. UTF

分享万能java字符串编码转换工具类

代码下载地址:http://www.zuidaima.com/share/1795356301560832.htm 原文:分享万能java字符串编码转换工具类 package com.zuidaima.util; import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public class ChangeCharset { /** 7位ASCII字符,也叫作ISO646-US.Unicode字符集的基本拉丁块 */ publ

Java web编码

v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} Normal 0 false 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {

Java的编码

整数的表达 –原码:第一位为符号位(0为正数,1为负数) –反码:符号位不动,原码取反 –负数补码:符号位不动,反码加1 –正数补码:和原码相同   -6      5 原码 10000110 00000101 反码 11111001 01111010 补码 11111010 00000101 补码运输的例子: -6+5                                                         -4+5 11111010                  

Java 字符编码归纳总结

String newStr = new String(oldStr.getBytes(), "UTF-8");       java中的String类是按照unicode进行编码的,当使用String(byte[] bytes, String encoding)构造字符串时,encoding所指的是bytes中的数据是按照那种方式编码的,而不是最后产生的String是什么编码方式,换句话说,是让系统把bytes中的数据由encoding编码方式转换成unicode编码.如果不指明,by

Java Script 编码规范

Java Script 编码规范 以下文档大多来自: Google JavaScript 编码规范指南 Idiomatic 风格 参考规范 ECMAScript 5.1 注解版 EcmaScript 语言规范, 5.1 版 基本原则: 无论有多少人在维护,所有在代码仓库中的代码理应看起来像同一个人写的. 前言 下面的章节描述的是一个 合理 的现代 JavaScript 开发风格指南,并非硬性规定.其想送出的核心理念是高度统一的代码风格(the law of code style consiste

java字符串编码转换

java字符串编码转换方法: 1 /** 2 * 将UTF-8编码参数转换成ISO-8859-1编码 3 */ 4 private String convertToISO_8859_1(String param) { 5 String result = null; 6 if (null != param && !"".equals(param)) { 7 try { 8 result = new String(param.getBytes("UTF-8&quo

java字符编码转换过程(转)

在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组.这个表示在不通OS下,返回的东西不一样! String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如 byte[] b_gbk = "中".getBytes("GBK"); byte[] b_utf8 = "中".getBytes("UTF-8"); by

Java安全编码之用户输入

0x00 安全引言 1.传统Web应用与新兴移动应用 (1)传统Web应用:浏览器 HTTP 服务器(2)新兴移动应用:APP HTTP 服务器 从安全角度看,传统Web应用与新兴移动应用没有本质区别 2.Web应用安全的核心问题是什么? 用户提交的数据不可信是Web应用程序核心安全问题 用户可以提交任意输入 例如: √ 请求参数->多次提交或者不提交√ 修改Cookie√ 修改HTTP信息头√ 请求顺序->跳过或者打乱 3.Web应用防御 (1)完善的异常处理(2)监控(3)日志:记录重要业