由UTF-8转GBK显示,思路如下:

UTF-8 转 Unicode,Unicode查表转GBK,再根据字库显示

第一步:需要了解UTF-8转UNICODE 规则

UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。 
如表: 
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中可以用来表示字符编码的实际位数最多有31位,即上表中x所表示的位。

除去那些控制位(每字节开头的10等),这些x表示的位与UNICODE编码是一一对应的,位高低顺序也相同。

(这是规则的关键点)
实际将UNICODE转换为UTF-8编码时应先去除高位0,然后根据所剩编码的位数决定所需最小的UTF-8编码位数。 
因此那些基本ASCII字符集中的字符(UNICODE兼容ASCII)只需要一个字节的UTF-8编码(7个二进制位)便可以表示。

如:南:(以下为十六进制)

UTF-8                         E5             8D                  97

1110 0101   1000 1101     1001  0111

Unicode                         5              3           5              7

第二步:Unicode转GBK

通过Unicode码得到该字所在地址,在文件中读取GBK编码的字, 该查表文件

https://download.csdn.net/download/sjygqz/12505477

u16 OneUNICODEtoGBK(u16 unicode)  //用二分查找算法
{u32 offset;u16 temp;UINT bw;u8 buff[2];if(unicode<=0X9FA5){if(unicode>=0X4E00)offset=unicode-0X4E00;//0x1b87      //0X4E00,汉字偏移起点elsereturn 0x2020;       //不能显示的字符就给两个空格填充,否则乱码} else if(unicode>0X9FA5)//是标点符号{if(unicode<0XFF01||unicode>0XFF61)return 0x2020;//没有对应编码    //不能显示的字符就给两个空格填充,否则乱码offset=unicode-0XFF01+0X9FA6-0X4E00;    }offset *= 2;f_lseek(&UtoG_File, offset);                      //文件指针调到偏移位置if(f_read(&UtoG_File, buff, 2, &bw) != FR_OK)  //读取2字节{return 0x2020;}temp = buff[0];temp <<= 8;temp += buff[1];return temp; //返回找到的编码
}

以上代码引用改博文https://blog.csdn.net/cp1300/java/article/details/9034289

UTF-8转GBK 中文显示相关推荐

  1. 让英文版的LINUX 支持中文显示

    (以REDHAT为例) 1.首先查看系统中有没有安装中文支持软件包   rpm -qa |grep fonts-chinese 如果命令执行后能够查询到相应的包,那么说明已经安装过包:反之则没有安装 ...

  2. QT的中文显示乱码问题解决

    QT的中文显示乱码问题解决 QT的中文显示乱码问题解决: 1.查看源文件的编码格式,有必要的话转换源文件的编码格式再重新编译运行尝试汉字能否正常显示. 2.在代码里面解决: 3.用法: QT的中文显示 ...

  3. oracle11g怎么显示中文,ORACLE11G中PLSQL中文显示乱码、Linux下sqlplus查询中文乱码

    问题描述: 本地是win7操作系统,cmd里面sqlplus进去连接oracle数据库,中文可以正常显示,但是plsql连接oracle数据库,中文显示乱码,还有xshell远程连接oracle服务器 ...

  4. QT中文显示乱码解决

    问题如下: 1.中文显示乱码 2.数据库连接不上 问题一:但是如果我们的软件只运行在中文系统下,最简单的方法:在main函数中调用QTextCodec::setCodecForTr( QTextCod ...

  5. sqlite的控制台中文显示问题

    先看此图, 中文 insert into 和显示没有问题: 我在控制台操作sqlite,中文的插入和显示从来都是好的:只有在程序访问sqlite时才会遇到中文乱码相关问题: 看一下控制台的代码页,在控 ...

  6. linux u盘内容乱码,Linux挂载U盘,中文显示为乱码

    生产环境: OS:CentOS release 6.8 (Final) U盘:FAT32 任务:通过复制U盘中的内容到Linux相关目录下. #mkdir /mnt/usb   #创建一个目录,用于挂 ...

  7. windows下的文本文件在linux下查看,中文显示乱码

    windows下的文本文件在linux下查看,中文显示乱码 伏心救赎 2013-03-05 14:37:37 581 收藏 分类专栏: 基于类linux的开发 </div></div ...

  8. sublime text html乱码,Sublime Text 2中文显示乱码的解决方法

    Sublime Text 2中文显示乱码的解决方法 发布时间:2014-05-12 15:30:14   作者:佚名   我要评论 这篇文章主要介绍了Sublime Text 2中文显示乱码的解决方法 ...

  9. php显示json,PHP解决JSON中文显示问题

    PHP如何解决JSON中文显示问题?本文主要介绍了PHP JSON格式的中文显示问题解决方法,本文总结了3种解决中文显示\u开头字符问题的方法.希望对大家有所帮助. 返回json数据中文显示的问题 解 ...

最新文章

  1. Laravel Redis操作大全
  2. GDAL算法进度条使用说明
  3. 一个初学者困惑的Oracle的认证问题
  4. UOJ#80 二分图最大权匹配 [模板题]
  5. iOS - 获取安装所有App的Bundle ID
  6. 如何使用布隆过滤器在Java中建立大容量的内存缓存
  7. 提高应用程序稳定的小内容
  8. 工业互联网巨头 GE Digital 修复SCADA 软件中的两个高危漏洞
  9. android重要的对象
  10. nodejs学习笔记(上)
  11. Linux 脚本安装包
  12. memcache_engine-高性能分布式内存数据库
  13. 学生选课管理信息系统
  14. Python 时间序列数据平滑去噪 Savitzky-Golay滤波器
  15. 阿里巴巴大数据实践:大数据建设方法论OneData
  16. 应用代码(4)——基于ADS1110芯片的高精度温度(PT1000)采集
  17. 论测试人员和开发人员沟通的重要性
  18. windows服务器安全管理工具——IISCrypto
  19. 10电脑睡眠后自动关机怎么回事 win_win10睡眠变自动关机怎么办
  20. HBuilder封装APP

热门文章

  1. Java中的引用类型
  2. 一个睡五分钟等于六个钟头的方法791173729
  3. vue App 端防止页面键盘弹起 页面不下来
  4. h5移动端循环弹幕动画实现
  5. codeforces 1783 C. Yet Another Tournament
  6. 【JavaWeb】解决cookie跨域访问
  7. 整理常见标点的中英文对照
  8. mysql like_mysql 模糊查询 like 语句
  9. Obsidian 彩色标题
  10. 服务器挂载云盘是做什么用,单独创建的云盘怎么挂载到ECS实例上