码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 基于C/C++的UTF-8转GBK


        最近老遇到C/C++中中文汉字或符号 编码的问题,网上的大部分资料都是依赖第三方的库来解决的,这里给大家分享一个非库函数实现的编码转换补充。 

           如下图所示:在Windows下控制台程序中,加载UTF8的文件时候,会出现中文的乱码问题,这让我是非常头疼的。

      

    中文乱码

        经过一番解决,最后采用最原始的方式来解决了这个问题!!!

     如下图所示:

    参考 简体中文GB2312 汉字编码表 

    GB2312汉字编码表-数据集文档类资源-CSDN文库

    1. const unsigned short gb2312table[20902] =
    2. {
    3. 0xd2bb,0xb6a1,0x8140,0xc6df,0x8141,0x8142,0x8143,0xcdf2,0xd5c9,0xc8fd,0xc9cf,0xcfc2,0xd8a2,0xb2bb,0xd3eb,0x8144,
    4. ..........
    5. 0xd9df,0xfd97,0xfd98,0xfd99,0xfd9a,0xfd9b
    6. };

     详细见:GB2312中文编码库-数据集文档类资源-CSDN文库

    附上主要实现代码:

    1. static char pszBufOut[4300];
    2. char* GBK_Format(const unsigned char* pszBufIn)
    3. {
    4. int i = 0;
    5. int j = 0, nLen;
    6. unsigned short unicode;
    7. unsigned short gbk;
    8. int nBufInLen = 0;
    9. if (pszBufIn == NULL)
    10. return NULL;
    11. nBufInLen = strlen((char*)pszBufIn);
    12. for(; i < nBufInLen; i++, j++)
    13. {
    14. if((pszBufIn[i] & 0x80) == 0x00)
    15. {
    16. nLen = 1;
    17. pszBufOut[j]= pszBufIn[i];
    18. }
    19. else if ((pszBufIn[i] & 0xF0) == 0xE0)
    20. {
    21. if (i+ 2 >= nBufInLen) return NULL;
    22. unicode = (((int)(pszBufIn[i] & 0x0F)) << 12) | (((int)(pszBufIn[i+1] & 0x3F)) << 6) | (pszBufIn[i+2] & 0x3F);
    23. gbk = gb2312table[unicode-0x4e00];
    24. pszBufOut[j]= gbk/256;
    25. pszBufOut[j+1] = gbk%256;
    26. j++;
    27. i+=2;
    28. }
    29. else
    30. {
    31. return NULL;
    32. }
    33. }
    34. return pszBufOut;
    35. }

  • 相关阅读:
    在手机浏览器中打开指定的应用商店
    ThreadLocal你真的用不上吗?
    腾讯云死磕政务云?
    车载软件架构 —— AUTOSAR Vector SIP包(三)
    【Android面试八股文】讲一讲StackOverFlow和OOM的区别?栈和堆分别存储的是什么?
    前端例程20220913:粒子飘落效果动画背景
    【RuoYi移动端】uni-app中通过vuex的store来实现全局变量的修改和读取
    Google Earth Engine(GEE)——用两种方法计算NDWI水域面积提取(Landsat 8)
    超级水王问题
    剑指 Offer 50. 第一个只出现一次的字符
  • 原文地址:https://blog.csdn.net/github_37687123/article/details/127920247
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号