2024-09-27 buildroot C和语言将 中文的GBK编码转换为 UTF-8 的代码, printf 显示出来,使用 iconv 库去实现。

一、GBK 的英文全称是 "Guobiao Kuozhan",意为 "National Standard Extended"。它是对 GB2312 编码的扩展,用于表示更多汉字和符号

       GBK(国标扩展汉字编码)是一种用于简体中文和繁体中文字符的编码方式,属于汉字编码的扩展,主要用于 Windows 和某些其他操作系统。以下是一些关于 GBK 编码的要点:

  1. 编码范围

    • GBK 编码扩展了 GB2312 编码,支持的字符总数达 21,000 多个,涵盖了常用的汉字、符号和标点。
  2. 字节结构

    • GBK 编码的字符通常由一个或两个字节组成:
      • ASCII 字符(如英文字母和数字)用单个字节表示(0x00-0x7F)。
      • 汉字和其他字符使用两个字节表示。
  3. 兼容性

    • GBK 向下兼容 GB2312,这意味着 GB2312 编码的字符在 GBK 中可以直接使用。
  4. 使用场景

    • 在中国大陆的许多软件和操作系统中广泛使用,尤其是在 Windows 平台上。
  5. 与其他编码的比较

    • GBK 与 UTF-8 和其他编码(如 ISO-8859-1)相比,主要用于处理中文文本,UTF-8 是一种更通用的编码方式,支持全球所有语言。
  6. 转换工具

    • 可以使用工具(如 iconv)进行 GBK 与其他编码(如 UTF-8)之间的转换。
  7. 示例

    • 在 C 语言中,可以使用 char 数组表示 GBK 编码的字符串,例如 char gbkStr[] = {0xC1, 0xF5, 0x00}; 表示汉字“刘”。

二、在 UTF-8 编码中,中文字符通常使用 3 个字节表示。以下是一些关于中文 UTF-8 编码的要点:

  1. 编码方式

    • 中文字符(如汉字)在 UTF-8 中占用 3 个字节,字节范围通常为:
      • 第一个字节:0xE0 到 0xEF
      • 第二个字节:0xA0 到 0xBF
      • 第三个字节:0x80 到 0xBF
  2. 示例

    • 汉字“刘”的 UTF-8 编码为 0xE6 0x88 0x91。可以使用 C 语言中的字符串表示:
       

      c

      Copy code

      char utf8Str[] = {0xE6, 0x88, 0x91, 0x00}; // "刘"

  3. 兼容性

    • UTF-8 兼容 ASCII 字符集,因此包含 ASCII 字符的文本在 UTF-8 中也是有效的。
  4. 使用场景

    • UTF-8 是互联网上最常用的编码方式,广泛用于网页、文档和数据库中,支持多种语言的字符,包括中文。
  5. 优点

    • 由于能够表示全球所有字符,UTF-8 在国际化应用中具有明显优势,简化了文本处理和存储。
  6. 工具与库

    • 多种编程语言和库都提供了对 UTF-8 的良好支持,可以轻松进行编码和解码。

三、buildroot C语言代码demo,include iconv.sh,同时确保已经编译出libiconv.so

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iconv.h>

void convertGBKToUTF8(const char *gbkStr, char *utf8Str, size_t utf8StrSize) {
    iconv_t cd = iconv_open("UTF-8", "GBK");
    if (cd == (iconv_t)(-1)) {
        perror("iconv_open");
        exit(1);
    }

    char *inBuf = (char *)gbkStr;
    size_t inBytesLeft = strlen(gbkStr);
    char *outBuf = utf8Str;
    size_t outBytesLeft = utf8StrSize;

    size_t result = iconv(cd, &inBuf, &inBytesLeft, &outBuf, &outBytesLeft);
    if (result == (size_t)(-1)) {
        perror("iconv");
        iconv_close(cd);
        exit(1);
    }

    *outBuf = '\0'; // Null-terminate the UTF-8 string
    iconv_close(cd);
}

int main() {
    char gbkStr[] = {0xC1, 0xF5, 0x00}; // GBK 编码的“刘”
    char utf8Str[100];

    convertGBKToUTF8(gbkStr, utf8Str, sizeof(utf8Str));
    printf("%s\n", utf8Str); // 显示 UTF-8 编码的汉字

    return 0;
}

四、实际测试效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/884057.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 从入门到实战30(高级文件的操作)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了操作目录的相关知识。今天我们将学习一下高级文…

Mac系统Docker中SQLserver数据库文件恢复记录

Mac系统Docker中SQLserver数据库文件恢复记录 Mac想要安装SQLsever&#xff0c;通过docker去拉去镜像是最简单方法。 一、下载Docker Docker 下载安装&#xff1a; 需要‘科学上网’ 才能访问到docker官网。&#xff08; https://docs.docker.com/desktop/install/mac-ins…

C语言进阶版第12课—字符函数和字符串函数1

文章目录 1. 字符分类函数1.1 库函数iscntrl1.2 库函数isspace1.3 库函数islower和isupper 2. 字符转换函数3. strlen函数的使用和模拟实现3.1 strlen函数的使用3.2 strlen函数的模拟实现 4. strcpy函数的使用和模拟实现4.1 strcpy函数的使用4.2 strcpy函数的模拟实现 5. strca…

C++读取txt文件中的句子在终端显示,同时操控鼠标滚轮(涉及:多线程,产生随机数,文件操作等)

文章目录 &#x1f315;运行效果&#x1f315;功能描述&#x1f315;代码&#x1f319;mian.cpp&#x1f319;include⭐MouseKeyControl.h⭐TipsManagement.h &#x1f319;src⭐MouseControl.cpp⭐TipsManagement.cpp &#x1f315;运行效果 &#x1f315;功能描述 线程一&am…

web前端-CSS引入方式

一、内部样式表 内部样式表(内嵌样式表)是写到html页面内部,是将所有的 CSS 代码抽取出来,单独放到一个<styie>标签中。 注意: ① <style>标签理论上可以放在 HTML文档的任何地方&#xff0c;但一般会放在文档的<head>标签中 ② 通过此种方式&#xff0c;可…

开发提效的工具tabby快速入门

1.什么是tabby&#xff1f; Tabby is an open-source, self-hosted AI coding assistant. With Tabby, every team can set up its own LLM-powered code completion server with ease. 官方网站&#xff1a;https://tabby.tabbyml.com/ 2.tabby服务安装(Hugging Face Spaces…

虚幻引擎的三种输入模式和将控件显示到屏幕上

首先要知道一个概念 , HUD 和 Input 都是由 PlayerController 来控制的 而虚幻的Input控制模式有三种 Set Input Mode Game Only (设置输入模式仅限游戏): 视角会跟着鼠标旋转 , 就是正常游戏的模式 , 这也是游戏默认输入模式 Set Input Mode UI Only (设置输入模式仅限UI): …

【C++】 vector 迭代器失效问题

【C】 vector 迭代器失效问题 一. 迭代器失效问题分析二. 对于vector可能会导致其迭代器失效的操作有&#xff1a;1. 会引起其底层空间改变的操作&#xff0c;都有可能是迭代器失效2. 指定位置元素的删除操作--erase3. Linux下&#xff0c;g编译器对迭代器失效的检测并不是非常…

通信工程学习:什么是FDD频分双工

FDD:频分双工 FDD(频分双工,Frequency Division Duplexing)是一种无线通信技术,它通过将频谱划分为上行和下行两个不重叠的频段来实现同时双向通信。以下是FDD频分双工的详细解释: 一、定义与原理 定义: FDD是一种无线通信系统的工作模式,其中上行链路(从移动…

每日OJ_牛客_OR59字符串中找出连续最长的数字串_双指针_C++_Java

目录 牛客_OR59字符串中找出连续最长的数字串 题目解析 C代码1 C代码2 C代码3 Java代码 牛客_OR59字符串中找出连续最长的数字串 字符串中找出连续最长的数字串_牛客题霸_牛客网 题目解析 双指针&#xff1a; 遍历整个字符串&#xff0c;遇到数字的时候&#xff0c;用双…

坚果N1 Air高亮版对比当贝D6X高亮版:谁是2000元预算的投影仪王者?

当贝D6X高亮版新品升级&#xff0c;对于那些计划在这个时间点购买投影仪的用户来说&#xff0c;现在是个绝佳的时机&#xff01;特别是那些预算在两千元左右的&#xff0c;目前两千元左右的投影仪&#xff0c;无外乎两款产品&#xff0c;当贝D6X高亮版和坚果N1 Air高亮版&#…

常见区块链数据模型介绍

除了加密技术和共识算法&#xff0c;区块链技术还依赖于一种数据模型&#xff0c;它决定了信息如何被结构化、验证和存储。数据模型定义了账户如何管理&#xff0c;状态转换如何发生&#xff0c;以及用户和开发者如何与系统交互。 在区块链技术的短暂历史中&#xff0c;数据…

13年408计算机考研-计算机网络

第一题&#xff1a; 解析&#xff1a;OSI体系结构 OSI参考模型&#xff0c;由下至上依次是&#xff1a;物理层-数据链路层-网络层-运输层-会话层-表示层-应用层。 A.对话管理显然属于会话层&#xff0c; B.数据格式转换&#xff0c;是表示层要解决的问题&#xff0c;很显然答案…

怎样用云手机进行TikTok矩阵运营?

在运营TikTok矩阵时&#xff0c;许多用户常常面临操作复杂、设备过多等问题。如果你也感到操作繁琐&#xff0c;不妨考虑使用云手机。云手机具备丰富的功能&#xff0c;能够帮助电商卖家快速打造高效的TikTok矩阵。接下来&#xff0c;我们将详细解析这些功能如何提升你的运营效…

智能化转型新篇章:EasyCVR引领大型连锁超市视频监控进入AI时代

随着科技的飞速发展&#xff0c;视频监控系统在各行各业中的应用日益广泛&#xff0c;大型连锁超市作为人员密集、商品繁多的公共场所&#xff0c;其安全监控显得尤为重要。为了提升超市的安全管理水平、减少损失、保障顾客和员工的安全&#xff0c;引入高效、全面的视频监控系…

Meta震撼发布Llama3.2大规模模型

在2024.9.26的年Meta Connect大会上&#xff0c;Meta正式推出了Llama3.2模型&#xff0c;旨在提升边缘AI和视觉任务的能力。Llama3.2系列包括11亿和90亿参数的中型视觉模型&#xff0c;以及为移动设备优化的1亿和3亿参数的小型模型&#xff0c;并针对高通和联发科的硬件平台进行…

Navicat数据库管理工具实现Excel、CSV文件导入到MySQL数据库

1.所需要的工具和环境 navicat等第三方数据库管理工具云服务器中安装了 1Panel面板搭建的mysql数据库 2.基于 1Panel启动mysql容器 2.1 环境要求 安装前请确保您的系统符合安装条件&#xff1a; 操作系统&#xff1a;支持主流 Linux 发行版本&#xff08;基于 Debian / Re…

C#和数据库高级:虚方法

文章目录 一、抽象方法和抽象类中的思考1.1、回顾抽象方法的特点1.2、针对抽象方法问题的引出 二、虚方法的使用步骤2.1、虚方法重写方法的调用2.2、系统自带的虚方法2.3、重写Equals方法2.4、虚方法和抽象方法的比较 三、虚方法和抽象方法的联系3.1、ToString()方法的应用 一、…

ARM点灯---看手册

知识点&#xff1a; 一个程序可能会遇到内存泄漏问题&#xff0c;可能一次运行泄漏几M大小&#xff0c;执行几个小时才会泄漏到站崩溃&#xff0c;所以要查看是否有内存泄漏。 查看手册教程 0927-上午 视频1&#xff1a;25&#xff1b;00 硬件程序开发流程 最小系统:单片…

单词的秘密3:从eight说起

单词的秘密&#xff0c;所谓秘密&#xff0c;就是指只有圈内的人知道&#xff08;而圈子往往代表了狭隘或某种专业性、独特或独占或垄断性&#xff09;&#xff0c;或者只有少数的人知道。 同样&#xff0c;一些单词的秘密&#xff0c;如果我不说&#xff0c;可能这一辈子&…