UTF-8格式

前言

  通过串口接收来自GPS芯片发送的格式化数据,解析存取数据并返回显示经纬度所对应的地址。

  通过百度API,获取了对应经纬度的相关地址数据。但是接口文档数据格式是UTF-8格式的。

  突然想细致的了解下,UTF-8的具体实现。

 

经过网页返回的数据,我将返回数据保存到了本地文件。

文件名:oeisme.xml

 

 
 
    0
     
    
            
                27.985899990961
                120.68210002289
            
            浙江省温州市瓯海区塘东路
            梧田,南浦,大堡底
            
                
                塘东路
                瓯海区
                温州市
                浙江省
                中国
                
                
                
            
                178
                
                
    南塘大道立交桥西406米
    

 

 

UTF-8初步了解

UTF-8用1到6个字节编码UNICODE字符,是可变长类型

  • 1字节 0xxxxxxx 
  • 2字节 110xxxxx 10xxxxxx 
  • 3字节 1110xxxx 10xxxxxx 10xxxxxx 
  • 4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 
  • 5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 
  • 6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

上面是他的编码类型,网上有很多参考内容

UTF-8概要:

遇到英文,UTF-8自动用1个字节去记录,

例如: 字符‘a’ 的字符集编码是97,UTF-8自动选用了1字节的方法 0xxxxxxx,排序后0110 0001

遇到中文,UTF-8一般用3个字节去表示

例如: 中文‘浙’ 的编码GBK2312的16进制是 6D59,其二进制0110 1101 0101 1001

由UTF-8表示的话,则自动选取 3字节的方法1110xxxx 10xxxxxx 10xxxxxx 
对应表

1110xxxx 10xxxxxx 10xxxxxx
         0110        110101        011001

排序后

 1110 0110 1011 0101 1001 1001 1110 0110

 

大概思路:

 

 

  1. 发现字符集为负的。
  2. 从第一个为负的字符集开始取,取三个字节
  3. 交付给函数Getplacename。
  4. 返回由三个字符集为负的字节所计算出来的中文 wchar_t 类型

 

Getplacename大概思路:

  1. 先把三个字符集为负的数转换成二进制,然后统一放入一个临时数组。
  2. 设已知是3个字节,将 UTF-8 24bit 转换成 Unicode 16bit
  3. 将放着 Unicode 16bit 的二进制char型数组 转换成整型
  4. 返回整型字符集,如果是 “浙” 则返回 27993.
  5. 将整型赋给 wchar_t 时,他会自动解释为字符集所对应的字符串,也就是“浙”

 

但我还是遇到一个非常懊恼的问题,这个wchar_t不知道为什么无法打印出来。

希望我以后能够解决。

 

 

 

 

 

2015年11月27日   -    wchar_t 打印到控制台

 

#include

在类构造或者其他位置设置一次即可。

setlocale(LC_ALL,  "Chinese-simplified");

你可能感兴趣的:(C/C++)