utf-8 to unicode

原创 2017年05月17日 00:06:07

一、utf-8 unicode utf-16

  • 1、unicode 使用两字节表示字符。
  • 2、utf-8 和 utf-16均为变长编码,使用1~4个字节来表示字符。
  • 3、utf-8 和 utf-16是不一样的,汉子使用 unicode 表示是两个字节,utf-8 是三个字节,utf-16 是两个字节。
  • 4、utf-8 只是 unicode的一种实现方式,类似的方式还有 utf-16 和 utf-32。
  • 5、Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。目前的Unicode字符分为17组编排,0x0000 至 0xFFFF,每组称为平面(Plane),而每平面拥有65536个码位,共1114112个。然而目前只用了少数平面。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。
  • 6、UCS-2用两个字节编码,UCS-4用4个字节编码。

二、utf-8 和 unicode 的对应关系

// #txt—
| Unicode符号范围 | UTF-8编码方式
n | (十六进制) | (二进制)
—+———————–+——————————————————
1 | 0000 0000 - 0000 007F | 0xxxxxxx
2 | 0000 0080 - 0000 07FF | 110xxxxx 10xxxxxx
3 | 0000 0800 - 0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
4 | 0001 0000 - 0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5 | 0020 0000 - 03FF FFFF | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6 | 0400 0000 - 7FFF FFFF | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

// #txt—end

三、C语言实现 utf-8 to unicode

#include <stdio.h>
#include "stdint.h"

#define DLS_LEN     (uint8_t)129
#define DWBYTE(b3, b2, b1, b0) (((uint32_t)((uint8_t)(b3) << 24)) | ((uint8_t)(b2) << 16) | ((uint8_t)(b1) << 8) | ((uint8_t)(b0)))

void UTF8ToUnicode(uint8_t *UTF8,uint16_t *Unicode)
{
    uint16_t i=0,j=0;
    uint8_t buf[4];

    while(UTF8[i])
    {
        if((UTF8[i]&0x80)==0x00)
        {
            Unicode[j]=(uint16_t)DWBYTE(0,0,0,UTF8[i]);
            i+=1;
        }
        else if((UTF8[i]&0xe0)==0xc0)
        {
            buf[1]=(UTF8[i]&0x1c)>>2;
            buf[0]=(UTF8[i]<<6)|(UTF8[i+1]&0x3f);
            Unicode[j]=(uint16_t)DWBYTE(0,0,buf[1],buf[0]);
            i+=2;
        }
        else if((UTF8[i]&0xf0)==0xe0)
        {
            buf[1]=(UTF8[i]<<4)|((UTF8[i+1]&0x3c)>>2);
            buf[0]=(UTF8[i+1]<<6)|(UTF8[i+2]&0x3f);
            Unicode[j]=(uint16_t)DWBYTE(0,0,buf[1],buf[0]);
            i+=3;
        }
        else if((UTF8[i]&0xf8)==0xf0)
        {
            buf[2]=((UTF8[i]&0x07)<<2)|((UTF8[i+1]&0x30)>>4);
            buf[1]=((UTF8[i+1]&0x0f)<<4)|((UTF8[i+2]&0x3c)>>2);
            buf[0]=(UTF8[i+2]<<6)|(UTF8[i+3]&0x3f);
            Unicode[j]=(uint16_t)DWBYTE(0,buf[2],buf[1],buf[0]);
            i+=4;
        }
        else
        {
            Unicode[j] = (uint16_t)UTF8[i];
            i++;
        }
        if(Unicode[j]<0x20)
            Unicode[j]=0x20;
        j++;
        if(i>=(DLS_LEN-1))
            break;
    }
    if(j>=(DLS_LEN-1))
        Unicode[DLS_LEN-1]=0x00;
    else
        Unicode[j]=0x00;
}

int main()
{
    uint8_t xx=0;

    uint8_t utf8[256] = {0xE6,0xA2,0x81,0xE9,0x9D,0x99,0xE8,0x8C,0xB9};
    uint16_t unicode[256];

    UTF8ToUnicode(utf8,unicode);

    for(xx; xx<20; xx++)
    {
        printf("unicode[%d]:0x%x\n",xx,unicode[xx]);
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎访问个人主页 http://cyang.tech https://blog.csdn.net/u011303443/article/details/72355081

java 在Unicode和UTF-8之间转换

在Unicode和UTF-8之间转换 try { // Convert from Unicode to UTF-8 String string = "abc\u5639\u563b"; by...
  • xyw_Eliot
  • xyw_Eliot
  • 2013-01-16 19:29:20
  • 28725

简述 ascii、unicode、utf-8、gbk 的关系

简述 ascii、unicode、utf-8、gbk 的关系 ascii 是最早美国用的标准信息交换码,把所有的字母的大小写,各种符号用 二进制来表示,共有256中,加入些拉丁文等字符,1byt...
  • m0_37777640
  • m0_37777640
  • 2017-09-06 06:43:11
  • 478

JAVA将Unicode转化为UTF-8

以下为代码 import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.util.regex.Matcher; i...
  • qq_26479655
  • qq_26479655
  • 2016-05-09 23:51:21
  • 3065

浅析unicode和UTF-8、UTF-16、UTF-32的区别

1、区别编码字符集和字符集编码首先要注意的是unicode是编码字符集,而UTF-8、UTF-16、UTF-32是字符集编码(好绕哎有没有)。下面我来具体解释一下:比如汉字的”汉”,在unicode中...
  • Co_yiqiu
  • Co_yiqiu
  • 2017-02-09 19:45:54
  • 5849

Python 编码问题 utf-8 和 unicode

前言:utf-8 和 unicodeUTF-8,1个汉字占3个字节,扩展B区以后的汉字占4个字节。 GBK,1个汉字占2个字节。 UTF-16,通常汉字占两个字节,范围是 \u4e00-\u9fa...
  • never_cxb
  • never_cxb
  • 2015-11-21 19:52:09
  • 4662

Android Java中将unicode的汉字码转换成utf-8格式的汉字

最近项目中跟后台的交互莫名其妙的String类型的全部都是”乱码”了。比如网络请求给后台post传递的参数中有一个String类型的参数,结果到了后台哪里接收到的就是”乱码”了,同样的,后台给返回回来...
  • qq_34471736
  • qq_34471736
  • 2017-04-21 10:29:00
  • 2894

Unicode转UTF-8(安卓android)

欢迎访问我的技术博客Bigflower  http://www.flowerfat.com ----------------------------------- 今天在使用一个【手机号码归属地a...
  • liudehuaii18
  • liudehuaii18
  • 2015-10-14 17:08:03
  • 1866

JS实现unicode和UTF-8互转

有一设备,为短信网关。需将PC送过来的UTF-8转换成UNICODE才能将内容通过短信发送出去,同样,接收到的短信为unicode编码,也许转换成UTF-8才能在PC端软件显示出来。程序很简单,只是走...
  • shjhuang
  • shjhuang
  • 2017-07-05 01:32:46
  • 2003

Unicode转换为UTF-8详解

记录Unicode如何转换为UTF-8,不涉及字符编码的历史、制定、版本等,如果想查询这方面的资料,请移步Google。 UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表...
  • tuzhao
  • tuzhao
  • 2016-07-27 16:34:44
  • 2125

字符编码:Unicode和UTF-8之间的关系

Unicode和UTF-8之间的关系 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出2...
  • xiaolei1021
  • xiaolei1021
  • 2016-08-02 14:08:12
  • 8982
收藏助手
不良信息举报
您举报文章:utf-8 to unicode
举报原因:
原因补充:

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