utf-8

原创 2007年09月30日 12:20:00
 
在网络中有很多地方都有采用UTF8编码,由于要编写与邮件服务端有关的程序,而邮件服务端有些地方用到了UTF8编码,所以对它有了初步的认识!

它其实和Unicode是同类,就是在编码方式上不同!
首先UTF8编码后的大小是不一定,不像Unicode编码后的大小是一样的!

我们先来看Unicode的编码:一个英文字母 “a” 和 一个汉字 “好”,编码后都是占用的空间大小是一样的,都是两个字节!

而UTF8编码:一个英文字母“a” 和 一个汉字 “好”,编码后占用的空间大小就不样了,前者是一个字节,后者是三个字节!

现在就让我们来看看UTF8编码的原理吧:
  因为一个字母还有一些键盘上的符号加起来只用二进制七位就可以表示出来,而一个字节就是八位,所以UTF8就用一个字节来表式字母和一些键盘上的符号。然而当我们拿到被编码后的一个字节后怎么知道它的组成?它有可能是英文字母的一个字节,也有可能是汉字的三个字节中的一个字节!所以,UTF8是有标志位的!

  当要表示的内容是 7位 的时候就用一个字节:0*******   第一个0为标志位,剩下的空间正好可以表示ASCII 0-127 的内容。

  当要表示的内容在 8 到 11 位的时候就用两个字节:110***** 10******   第一个字节的110和第二个字节的10为标志位。

  当要表示的内容在 12 到 16 位的时候就用三个字节:1110***** 10****** 10******    和上面一样,第一个字节的1110和第二、三个字节的10都是标志位,剩下的空间正好可以表示汉字。

  以此类推:
        四个字节:11110**** 10****** 10****** 10******
  五个字节:111110*** 10****** 10****** 10****** 10****** 
  六个字节:1111110** 10****** 10****** 10****** 10****** 10****** 
  .............................................
       ..............................................

明白了没有?
编码的方法是从低位到高位

现在就让我们来看看实例吧!

 黄色为标志位
其它着色为了显示其,编码后的位置

Unicode十六进制

Unicode二进制

UTF8二进制

UTF8十六进制

UTF8字节数

B

00001011

00001010

B

1

9D

00010011101

11000010 10011101

C2 9D

2

A89E

10101000 10011110

11101010 10100010 10011110

EA A2 9E

3


 

#coding=utf-8的作用 还是乱码

乱码产生的原因是Python在读取时默认解码方式是用操作系统编码,如果和保存时的编码方式不一样,就会出现乱码 比如以下片段,文件保存格式是utf-8 #coding=utf-8 print...
  • py693fz720
  • py693fz720
  • 2017年08月21日 23:37
  • 1102

python 的#-*-conding:utf-8-*- 和#encoding=utf-8

如果要在python2的py文件里面写中文,则必须要添加一行声明文件编码的注释,否则python2会默认使用ASCII编码。 [python] view plaincopy ...
  • chenlei_525
  • chenlei_525
  • 2013年06月07日 15:27
  • 2221

[Python]编码声明:是coding:utf-8还是coding=urf-8呢

我们知道在Python源码的头文件中要声明编码方式,如果你不只是会用到ascii码,很多人都写得都有点差别: #coding=utf-8 #coding:utf-8 #-*- c...
  • wangbenzhang
  • wangbenzhang
  • 2017年07月31日 16:24
  • 1293

response乱码 response.setCharacterEncoding("UTF-8")不生效的原因及解决方法

本文主要讲述response乱码原因及 response.setCharacterEncoding("UTF-8")不生效的原因及解决方法 一、response乱码 1、首先,resp...
  • TLMS_
  • TLMS_
  • 2017年12月08日 11:44
  • 182

Android Studio Utf-8编码设置

我们在使用Android Studio编写Android项目的时候,会发现在运行的时候,手机上看到的中文字符是乱码,这是怎么回事呢?这是因为Android Studio的默认编码格式为GBK,而我们一...
  • gulangboke
  • gulangboke
  • 2016年08月08日 19:23
  • 941

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

一、介绍两个类URLEncoder//编码URLDecoder//解码看看下面的测试输出,你就明白是做什么的了import java.io.UnsupportedEncodingException;i...
  • JOE4011
  • JOE4011
  • 2006年11月15日 16:24
  • 36491

springmvc @ResponseBody乱码,兼容UTF-8格式

在spring mvc中,@ResponseBody返回的默认编码为ISO-8859-1,但是实际需要的是UTF-8,所以需要转换,添加produces = "application/json; ch...
  • zhulin40
  • zhulin40
  • 2014年03月11日 11:24
  • 2966

C++中UTF-8转换成string

本来想着有没有直接将UTF-8编码转换成string的函数,查找了半天,然而并没有,无奈只好自己封装了一个,使用了C++11,代码如下: std::string MyString::UnicodeT...
  • wfmdyh
  • wfmdyh
  • 2017年06月07日 11:32
  • 634

为什么要采用UTF-8编码,UTF-8编码有什么好处?

什么是UTF8UTF8并不算是一种电脑编码,而是一种储存和传送的格式,如前所述,每个Unicode/UCS字符都以 2或4个bytes来储存,看看以下的比较:以"I am Chinese"为例用ANS...
  • jlfw
  • jlfw
  • 2011年05月02日 08:47
  • 2449

java读取写入utf-8编码文件

private static void replace(File file,String searchStr,String replaceStr) { // TODO Auto-generated...
  • djun100
  • djun100
  • 2013年10月16日 11:34
  • 23655
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:utf-8
举报原因:
原因补充:

(最多只允许输入30个字)