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

news2024/11/24 1:29:24

一、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.coloradmin.cn/o/2185839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业设计Python+Spark知识图谱酒店推荐系统 酒店价格预测系统 酒店可视化 酒店爬虫 酒店大数据 neo4j知识图谱 深度学习 机器学习

《PythonSpark知识图谱酒店推荐系统》开题报告 一、研究背景与意义 随着互联网技术的飞速发展和人们生活水平的提高&#xff0c;旅游和酒店行业迎来了前所未有的发展机遇。然而&#xff0c;面对海量的酒店信息和多样化的用户需求&#xff0c;如何快速、准确地为用户推荐符合其…

【Java】—— 集合框架:List接口常用方法与List接口的实现类

目录 4. Collection子接口1&#xff1a;List 4.1 List接口特点 4.2 List接口方法 4.3 List接口主要实现类&#xff1a;ArrayList 4.4 List的实现类之二&#xff1a;LinkedList 4.5 List的实现类之三&#xff1a;Vector 4.6 练习 4. Collection子接口1&#xff1a;List …

PCL 点云直通滤波

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 直通滤波实现 2.1.2 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#xf…

CS-BP预测 | MATLAB实现CS-BP布谷鸟搜索算法优化BP神经网络多变量时间序列预测

CS-BP预测 | MATLAB实现CS-BP布谷鸟搜索算法优化BP神经网络多变量时间序列预测 目录 CS-BP预测 | MATLAB实现CS-BP布谷鸟搜索算法优化BP神经网络多变量时间序列预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 MATLAB实现CS-BP多变量时间序列预测(布谷鸟搜索算法优化B…

VMware中Ubuntu系统Docker正常运行但网络不通(已解决)

问题描述&#xff1a;在VMware中的Ubuntu系统下部署了Docker&#xff0c;当在docker容器中运行Eureka微服务时&#xff0c;发现Eureka启动正常&#xff0c;但无法通过网页访问该容器中Eureka。 解决办法如下&#xff1a; 1、创建桥接网络&#xff1a;test-net sudo docker n…

媲美GPT-4o mini的小模型,Meta Llama 3.2模型全面解读!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…

高性能架构—存储高性能

1 &#x1f4ca;关系型数据库 存储技术飞速发展&#xff0c;关系型数据的ACID特性以及强大的SQL查询让其成为各种业务系统的关键和核心存储系统。 很多场景下的高性能设计最核心的就是关系型数据库的设计&#xff0c;很多数据库厂商再优化和提升单个数据库服务器的性能方面做了…

网络原理-数据链路层

在这一层中和程序员距离比较遥远&#xff0c;除非是做交换机开发&#xff0c;否则不需要了解数据链路层 由AI可知&#xff1a; 数据链路层&#xff08;Data Link Layer&#xff09;是OSI&#xff08;Open Systems Interconnection&#xff09;七层网络模型中的第二层&#xff0…

【Android 14源码分析】Activity启动流程-3

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

后台管理系统脚手架

后台管理系统脚手架 介绍 在快速迭代的软件开发世界里&#xff0c;时间就是生产力&#xff0c;效率决定成败。对于构建复杂而庞大的后台系统而言&#xff0c;一个高效、可定制的后台脚手架&#xff08;Backend Scaffold&#xff09;无疑是开发者的得力助手。 脚手架 后台脚…

Python案例--这天第几天

如何使用Python计算一年中的第几天&#xff1a;详细指南 在处理日期和时间时&#xff0c;我们经常需要确定一个特定日期是一年中的第几天。这在许多应用场景中都非常有用&#xff0c;比如日历应用程序、数据分析和时间管理工具。Python&#xff0c;作为一种广泛使用的编程语言…

低功耗4G模组Air780E之串口通信篇

你对低功耗4G模组Air780E有多少了解&#xff1f; 今天我们来讲解低功耗4G模组Air780E的串口通信的基本用法&#xff0c;小伙伴们&#xff0c;学起来吧&#xff01; 一、硬件准备 780E开发板一套&#xff0c;包括天线、USB数据线。 USB转TTL工具或线&#xff08;例如ch340、…

用CSS创造三角形案例

6.3.2 用CSS创造三角形 用div来创建&#xff0c;角上是平分的&#xff0c;所以要是内部宽高为0&#xff0c;其他边透明&#xff0c;正好是三角形。 代码 div {border: 12px solid;width: 0;height: 0;border-color: transparent red transparent transparent; } 与伪元素aft…

基于SSM的校园社团管理系统的设计 社团信息管理 智慧社团管理社团预约系统 社团活动管理 社团人员管理 在线社团管理社团资源管理(源码+定制+文档)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

【rCore OS 开源操作系统】Rust 字符串(可变字符串String与字符串切片str)

【rCore OS 开源操作系统】Rust 语法详解: Strings 前言 这次涉及到的题目相对来说比较有深度&#xff0c;涉及到 Rust 新手们容易困惑的点。 这一次在直接开始做题之前&#xff0c;先来学习下字符串相关的知识。 Rust 的字符串 Rust中“字符串”这个概念涉及多种类型&…

Pikachu-xss实验案例-钓鱼

攻击思路&#xff1a;提供一个与攻击网站相似的登陆的钓鱼页面&#xff1b;让用户输入登陆信息 查看项目源代码&#xff0c;首先访问 fish.php ,提供输入的登陆框&#xff0c; 从登陆框获取到账号、密码后&#xff0c;重定向到xfish.php 做保存&#xff1b; 因此&#xff0c;需…

遥感图像变换检测实践上手(TensorRT+UNet)

目录 简介 分析PyTorch示例 onnx模型转engine 编写TensorRT推理代码 main.cpp测试代码 小结 简介 这里通过TensorRTUNet&#xff0c;在Linux下实现对遥感图像的变化检测&#xff0c;示例如下&#xff1a; 可以先拉去代码&#xff1a;RemoteChangeDetection 分析PyTorch示…

C++基类构造器的自动调用

C基类构造器的自动调用 虽然基类的构造器和解构器不会被派生类继承&#xff0c;但它们会被派生类的构造器和解构器自动调用&#xff0c;今天我们用代码实证一下。 验证代码 源代码&#xff0c;仔细看注释内容&#xff1a; D:\YcjWork\CppTour>vim c2004.cpp #include &l…

特征工程与选择:优化模型性能的关键步骤----示例:特征工程在泰坦尼克号生存预测中的应用、使用递归特征消除(RFE)进行特征选择

特征工程和特征选择是机器学习流程中至关重要的环节&#xff0c;直接影响到模型的性能。特征工程涉及从原始数据中提取或构造有用的特征&#xff0c;而特征选择则是从已有的特征集中挑选出最相关的子集。 特征工程 特征工程是指创建能够使机器学习算法更好地理解数据的新特征的…

平面电磁波(解麦克斯韦方程)

注意无源代表你立方程那个点xyzt处没有源&#xff0c;电场磁场也是这个点的。 j电流面密度&#xff0c;电流除以单位面积&#xff0c;ρ电荷体密度&#xff0c;电荷除以单位体积。 j方程组有16个未知数&#xff0c;每个矢量有三个xyz分量&#xff0c;即三个未知数&#xff0c;…