UTF-8转GBK

这篇具有很好参考价值的文章主要介绍了UTF-8转GBK。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考链接:https://blog.csdn.net/yanchao7788/article/details/53196901

参考链接:你真的懂 Unicode 和 UTF-8 是什么关系吗?来看看这个就彻底懂了!_魔都飘雪的博客-CSDN博客_utf8和unicode的关系

UTF-8没办法直接转GBK,必须先转成unicode,再转成GBK

1.把UTF-8转成unicode,根据参考的链接,我做了实现。

2.把unicode转成GBK,这里的代码是FATFS文件系统里的,可以自己取官网下,里面的数组太长了,自己去下吧。文章来源地址https://www.toymoban.com/news/detail-508240.html

typedef unsigned int	UINT;	/* int must be 16-bit or 32-bit */
typedef unsigned char	BYTE;	/* char must be 8-bit */
typedef unsigned short	WORD;	/* 16-bit unsigned integer */
typedef unsigned int	DWORD;	/* 32-bit unsigned integer */
typedef WORD			WCHAR;	/* UTF-16 character type */


void ff_utf8touni(BYTE *inputS,//input string
                  WORD sLength,//string's length
                  DWORD *outputArr,//output Arr
                  WORD arrLength)//output arr max length
{
    WORD i,j,k,t,outputIndex,num;
    DWORD data;
    BYTE ch;
    outputIndex = 0;
    
    for(i=0;i<arrLength;i++)
    {
        outputArr[i] = 0;
    }

    if(sLength == 0 || arrLength == 0)return;


    for(i=0;i<sLength;)
    {
        ch = inputS[i];
        if(ch & 0X80)
        {
            num = 0;
            for(j=0;j<6;j++)//计算总共多少个个数
            {
                if(ch&0X80)
                {
                    num++;
                    ch <<= 1;
                }
                else
                {
                    break;
                }
            }
            if(i+num > sLength)break;

            k = 8 - (num+1);
            t=0;
            for(j=0;j<k;j++)
            {
                t <<= 1;
                t |= 1;
            }
            data = inputS[i] & t;//第一个字节

            for(j=1;j<num;j++)//其他的字节
            {
                data <<= 6;
                data |= inputS[i+j]&0X3F;
            }

            outputArr[outputIndex++] = data;

            i+=num;
        }
        else
        {
            outputArr[outputIndex++] = ch;
            i++;
        }

        if(outputIndex >= arrLength)break;
    }

}



WCHAR ff_uni2oem (	/* Returns OEM code character, zero on error */
	DWORD	uni	/* UTF-16 encoded character to be converted */
)
{
	const WCHAR *p;
	WCHAR c = 0, uc;
	UINT i, n, li, hi;


	if (uni < 0x80) {	/* ASCII? */
		c = (WCHAR)uni;

	} else {			/* Non-ASCII */
		if (uni < 0x10000) { /* Is it in BMP? */
			uc = (WCHAR)uni;
			p = 0;
            /* DBCS */
            //switch (cp) {	/* Get conversion table */
            //case 932 : p = uni2oem932; hi = sizeof uni2oem932 / 4 - 1; break;
            //case 936 : p = uni2oem936; hi = sizeof uni2oem936 / 4 - 1; break;
            //case 949 : p = uni2oem949; hi = sizeof uni2oem949 / 4 - 1; break;
            //case 950 : p = uni2oem950; hi = sizeof uni2oem950 / 4 - 1; break;
            //}
            p = uni2oem936; hi = sizeof uni2oem936 / 4 - 1;
            if (p) {	/* Is it valid code page? */
                li = 0;
                for (n = 16; n; n--) {	/* Find OEM code */
                    i = li + (hi - li) / 2;
                    if (uc == p[i * 2]) break;
                    if (uc > p[i * 2]) {
                        li = i;
                    } else {
                        hi = i;
                    }
                }
                if (n != 0) c = p[i * 2 + 1];
            }

		}
	}

	return c;
}

到了这里,关于UTF-8转GBK的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker pull链接不到外网Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request

    因为一些安全原因,公司的机器网络环境不能直接访问外网,需要配置代理才能够访问,导致我使用拉取镜像的时候连接不到,报了如下的错误: Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while 一般来说主机通过代理访问外网方式就是通过在命令行

    2024年02月12日
    浏览(49)
  • .Net 中实体类转换为XML字符串, 确保字符串头部是utf-8 不是utf-16

    使用 Utf8StringWriter 或类似的方法来确保在序列化过程中使用正确的编码。然而, Utf8StringWriter 不是.NET Core或.NET Standard库的一部分,因此你需要自己实现一个。 不过,有一种更简单的方法可以达到相同的效果,那就是使用 StringWriter 与 Encoding.GetEncoding(\\\"utf-8\\\") 结合,但这实际上

    2024年01月23日
    浏览(42)
  • 为什么要给数据库加索引?转自 https: //blog.tankery.me/development/why-we-need-indexes-for-database

    这篇文章不是数据库索引的使用文档,不会给每个功能的使用都做介绍,而是通过我自己的案例,对案例中遇到的几个点做详细的说明。如果想查看具体的使用帮助,可以参考官网的文档:Query Planning “老谭,测试发现睡眠历史记录页面的打开速度太慢了,你给快速解决一下

    2024年02月03日
    浏览(38)
  • 开箱即用的企业级前后端分离【.NET Core6.0 Api + Vue 2.x + RBAC】权限框架-Blog.Core

    今天要给大家推荐一个开箱即用的企业级前后端分离【.NET Core6.0 Api + Vue 2.x + RBAC】权限框架( 提高生产效率,快速开发就选它 ):Blog.Core。 Blog.Core通过详细的文章和视频讲解,将知识点各个击破,入门ASP.Net Core不再难。 项目功能完善,并且采用流行的前后端分离架构,代码

    2024年01月18日
    浏览(93)
  • Zotero在word中插入带超链接的参考文献/交叉引用/跳转参考文献

    Zotero以其丰富的插件而闻名,使用起来十分的带劲,最重要的是它是免费的、不卡顿,不像某专业软件。 然而Zotero在word插入参考文献时,无法为参考文献添加超链接,这是一个不得不提的遗憾。 不过,有大佬已经写出了基于Word VBA语言的代码,可以为Zotero在Word中的参考文献

    2024年02月02日
    浏览(55)
  • 支付宝小程序 生成https链接 生成alipays协议链接

    业务场景介绍: H5移动端支持微信支付 [ 微信支付分为微信内支付(JSAPI支付官方API)和微信外支付(H5支付官方API)] 支付宝支付 [手机网站支付转 APP 支付 官方API ] 订单生成逻辑:前端请求后端提交订单,后端去和微信或者支付宝对接生成订单(后续支付都是这个逻辑进行

    2024年02月08日
    浏览(48)
  • STM32的HAL库SPI驱动AD7788/7789连续转换

    在项目中需要使用高精度的ADC采集电压信号且没有高速需求,而STM32F103RCT6自带的ADC位数较低,故选择了一款24bit的低速ADC芯片AD7789,根据它的引脚与时序特性,复用了STM32的SPI模块来驱动。整个过程踩了一些坑,在此记录分享一下,表述适合初学者食用。 stm32cubemx的使用不做

    2024年02月19日
    浏览(49)
  • java访问https链接下载图片

    // 文件下载存储路径 String savePath = “D:/zhxcmfs/myFiles”; // 文件命名 String fileName = “图片.png”; // https文件下载链接 String apiHttp = “https://gimg2.baidu.com/image_search/src=http%3A%2F%2Flmg.jj20.com%2Fup%2Fallimg%2F1114%2F040221103339%2F210402103339-8-1200.jpgrefer=http%3A%2F%2Flmg.jj20.comapp=2002size=f9999,10000q=a80n

    2023年04月08日
    浏览(46)
  • https域名下 请求http图片链接 被自动变成https请求

    现象 在以 https 协议页面,以 img src=\\\"http://baidu.com/img/image.png\\\" 方式请求资源时,http 协议的资源地址被转为 https 的。 溯源检查过程 这个问题真的是第一次遇到,本地开发时没发现问题,等到上到测试环境时发现有些图片无法显示。 检查发现 域名用的是https,图片来源有两种

    2024年02月07日
    浏览(44)
  • burp抓包https链接不安全解决方法

    在浏览器已经导入 Burpsuite 的证书之后,抓包,浏览器仍然显示 抓取https包提示不是私密链接 解决方法 适用于没有继续访问的按钮。 浏览器输入 chrome://flags 搜索 翻译过来就是 允许从本地主机加载资源的证书无效。 并设置为 Enabled 在出现不是私密链接的页面直接 输入 thisisun

    2024年02月16日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包