Java 基础(ASCII 码,Unicode 编码,UTF-8, 二进制)

摘要:
所有数据均以二进制表示。一个字节可以用来表示256种不同的状态。相同的代码表示不同的字符。但是,它没有指定二进制代码应该如何存储。计算机无法区分三个字节分别代表一个符号还是三个符号。每个符号由三个或四个字节表示,可以使用1-6个字节表示一个符号,其余7个字节用于编码字符“等效于ASClI代码”。如果编码包含n个字节,则字节的剩余位用于编码字符。
ASCCII 码

在计算机内部,所有数据都使用二进制表示。每一个二进制位(bit)有0和1两种状态,因此8个二进制位就可以组合出256种状态,这被称为一个字节(byte)。一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。

缺点:

  • 不能表示所有字符。
  • 相同的编码表示的字符不一样:比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel
Unicode 编码

Unicode 编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,使用 Unicode 没有乱码的问题。

缺点: Unicode 只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储:无法区别 Unicode 和 ASCIl;计算机无法区分三个字节表示一个符号还是分别表示三个符号。另外,我们知道,英文字母只用一个字节表示就够了,如果 unicode 统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储空间来说是极大的浪费。

UTF-8
  • UTF-8 是在互联网上使用最广的一种 Unicode 的实现方式。
  • UTF-8 是一种变长的编码方式。它可以使用 1-6 个字节表示一个符号,根据不同的符号而变化字节长度。
  • UTF-8 的编码规则:
  1. 对于单字节的 UTF-8 编码,该字节的最高位为0,其余7位用来对字符进行编码《等同于ASClI码》。
  2. 对于多字节的 UTF-8 编码,如果编码包含n个字节,那么第一个字节的前n位为1,第一个字节的第 n+1位为0,该字节的剩余各位用来对字符进行编码。在第一个字节之后的所有的字节,都是最高两位为"10”",其余6位用来对字符进行编码。
class CharacterDemo{
	public static void main(String[] args){
                // 要在 Windows 操作系统上显示中文,必须以 ANSI 编码(即GBK 编码)保存
		System.out.println("Hello World! 你好, 中国!");
	}
}
二进制
  • Java整数常量默认是 int 类型,当用二进制定义整数时,其第32位是符号位; 当是 long 类型时,二进制默认占64位,第64位是符号位
  • 二进制的整数有如下三种形式:
    1. 原码:直接将一个数值换成二进制数。最高位是符号位
    2. 负数的反码:是对原码按位取反,只是最高位(符号位)确定为1。
    3. 负数的补码:其反码加1。
  • 计算机以二进制补码的形式保存
    1. 正数的原码,反码,补码都相同
    2. 负数的补码是其反码+1
      Java 基础(ASCII 码,Unicode 编码,UTF-8, 二进制)第1张
      计算机底层都以补码的方式来存储数据!

免责声明:文章转载自《Java 基础(ASCII 码,Unicode 编码,UTF-8, 二进制)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【转】 PostgreSQL数据类型校门外的树下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

[转]mysql导出导入中文表解决方法

在开发过程中会经常用到mysql导出导入中文表,本文将详细介绍其如何使用,需要的朋友可以参考下。 在开发过程中会经常用到mysql导出导入中文表,本文将详细介绍其如何使用,需要的朋友可以参考下一、先针对utf8导出: (1)导出源数据库的所有表: 代码如下: mysqldump -u root -p密码 --socket=mysql.sock --def...

IOS 特定于设备的开发:Core Motion基础

    Core Motion框架集中了运动数据处理。该框架是在IOS 4 SDK中引入的,用于取代accelerometer加速计访问。它提供了对3个关键的机载传感器的集中式监测。这些传感器有陀螺仪、磁力计和加速计组成,其中陀螺仪用于测量设备的旋转,磁力计提供了一种测量罗盘方位的方式,加速计用于监测沿着3根轴的重力变化。第四个入口点称为设备移动(devic...

26.怎样在Swift中定义宏?

  Swift 中没有宏定义,苹果建议使用let 或者 get 属性来替代宏定义值。虽然没有#define,但我们仍然可以使用 #if 并配合编译的配置来完成条件编译。下面会列出Swift项目开发中的一些常用宏定义,并提供源码。 1.常用字体宏定义 import Foundation import UIKit /// 系统普通字体 var gof_Sy...

使用HttpURLConnection通过post请求服务器时,URLEncode编码的必要性

通过Post提交表单数据时,数据类型为x-www-urlencoded,提交到服务器的数据服务器默认是通过URLEncoder.encode()编码过得,所以服务器处理时会用URLDecoder.decode(s)进行解码,此时传输的数据就不能包括一些特殊字符。如+、%2b原因:通过URLEncoder.encode()空格会被编码成+号,+号会被编码成%...

【GPU编解码】GPU硬编码 (转)

一、OpenCV中的硬编码 OpenCV2.4.6中,已实现利用GPU进行写视频,编码过程由cv::gpu::VideoWriter_GPU完成,其示例程序如下。 1 int main(int argc, const char* argv[]) 2 { 3 if (argc != 2) 4 { 5 st...

Vue之日历控件vue-full-calendar的使用

(1).安装依赖 npm install vue-full-calendar  npm install moment 因为这是日历插件用到了时间工具类 === moment  (2).文件中导入依赖 在想要用此插件的文件中导入依赖 import { FullCalendar } from 'vue-full-calendar' import "f...