gbk to utf8 utf8 to gbk

2023-11-11

GBK和UTF8之间的转换

By Cnangel on October 8, 2012 10:10 AM  |  No Comments

关于GBK和UTF-8之间的转换,很多初学者会很迷茫。

一般来说GBK和UTF-8是文字的编码方式,其对应的内码是不一样的,所以GBK和UTF-8的转换需要对内码进行一一映射,然后进行转换。

对于一般系统上的工程,一般使用libiconv即可,但是对于嵌入式或手机操作系统,libiconv显得就有点庞大了。

在这里提供GBK和UTF8转换以及全半角、大小写转换等函数,希望对手机开发的同学有所帮助,特别是在iOS上开发的同学。

strnormalize.h

strnormalize.c


具体全半角、简繁体转换使用方法见下代码:

 #include "strnormalize.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
 int main(int argc, char **argv)
 {
     str_normalize_init();
     unsigned options = SNO_TO_LOWER | SNO_TO_HALF;
     if (argc > 1) options = atoi(argv[1]);
 
     char *buffer = (char *)malloc(65536);
     memset(buffer, 0, 65536);
     while (fgets(buffer, 65536, stdin))
     {   
         str_normalize_utf8(buffer, options);
         printf("%s", buffer);
     }   
     free(buffer);
 
     return 0;
 }

UTF-8和GBK转换使用方法如下:

#include "strnormalize.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>

int main(int argc, char **argv)
{
    str_normalize_init();
    const char *utf8 = "我是utf-8字符!";
    const char *gbk = "����GBK�ַ���";
    uint32_t utf8_len = strlen(utf8);
    uint32_t gbk_len = strlen(utf8);
    uint32_t utf8buffer_len = utf8_len * 3 + 1;
    uint32_t gbkbuffer_len = gbk_len * 2 + 1;
    char *utf8buffer = (char *)malloc(utf8buffer_len);
    char *gbkbuffer = (char *)malloc(gbkbuffer_len);
    memset(utf8buffer, 0, utf8buffer_len);
    memset(gbkbuffer, 0, gbkbuffer_len);
    utf8_to_gbk(utf8, utf8_len, &gbkbuffer, &gbkbuffer_len);
    gbk_to_utf8(gbk, gbk_len, &utf8buffer, &utf8buffer_len);
    printf("utf8: %s<=>%d \t gbkbuffer: %s<=>%d\n", utf8, utf8_len, gbkbuffer, gbkbuffer_len);
    printf("gbk: %s<=>%d \t utf8buffer: %s<=>%d\n", gbk, gbk_len, utf8buffer, utf8buffer_len);
    free(utf8buffer);
    free(gbkbuffer);
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gbk to utf8 utf8 to gbk 的相关文章

  • 修改apache设置,支持UTF8和GBK

    1 修改 etc httpd conf httpd conf 文件 xff0c 将其中AddDefaultCharset行注释掉 前面加 2 保存后重新启动apache usr sbin apachectl restart或者service
  • Linux 文本文件编码GBK转UTF-8

    Linux服务器中调用Oracle卸数工具sqluldr2 xff0c 数据库编码为GBK 需要卸UTF 8的数据文件出来 xff0c 如果某个字段为中文 xff0c 因为GBK为两个字节 xff0c UTF 8为三个字节 xff0c 同样
  • MySQL gbk中文md5加密

    在MySQL中自带md5 函数可以进行md5加密 xff0c 但是加密字段默认为utf 8格式 select md5 39 这是一串加密数据 39 输出结果 xff1a ca53cf805e403f238b60935e8b68f0f3 可以
  • QT UTF-8转GBK编码

    在Qt5中使用Unicode来存储 操作字符串 xff0c windows下是GBK编码 UTF 8 转 GBK QString appLink span class token operator 61 span span class to
  • Linux下解决GBK迁移到UTF-8中文名乱码

    在windows上使用ftp上传文件到Linux上 xff0c 中文名称在Linux系统中显示为乱码 虽然将Linux的env设置了LANG 61 en US UTF 8 并且本地的Shell客户端编码也设置成UTF 8 xff0c 但在S
  • Linux文件名称乱码GBK转UTF8重命名

    因Java项目运行于Linux之上 xff0c 系统字符集为en US UTF 8 xff08 可通过locale命令查看 xff09 xff0c 而项目Java启动参数设置字符集为GBK 通过上传功能上传的附件文件名称为GBK格式 xff
  • linux中打开txt文件乱码,将gbk格式转换为utf-8格式

    中文乱码的原因是windows下是gbk编码 xff0c 而linux下是utf 8格式 在linux下需转换文件所在的文件夹下执行下列命令 xff1a 加 c 是为了忽略无效的字符 iconv f gbk t utf8 tmp txt g
  • GBK 编码

    GBK编码范围 xff1a 8140 xff0d FEFE xff0c 汉字编码范围见第二节 xff1a 码位分配及顺序 GBK编码 xff0c 是对GB2312编码的扩展 xff0c 因此完全兼容GB2312 80标准 GBK编码依然采用
  • java中的编码转换(以utf8和gbk为例)

    在正常javaweb开发中经常会发现字符转换的需求 xff0c 会存在中文字符转换乱码的现象 xff0c 如何解决以及其转换原理我至今懵懵懂懂 xff0c 于是专门写了个测试代码进行尝试 xff0c 总算理清了编码 xff0c 先上结论 x
  • 【python】报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte in position : illegal multibyte

    python读文件时报错 xff1a Traceback span class token punctuation span most recent call last span class token punctuation span F
  • 'gbk' codec can't encode character '\xa0' XXX解决方法

    在运行py文件时 xff0c 出现 UnicodeEncodeError gbk codec can t encode character xa0 in position XXX 让人摸不着头脑 注意这三个方面 xff0c 一般都能解决 1
  • 中文转拼音 (utf8版,gbk转utf8也可用)

    中文转拼音 utf8版 gbk转utf8也可用 https git oschina net cik pinyin php 64 param string str utf8字符串 64 param string ret format 返回格式
  • 'gbk' codec can't encode character解决方法

    Friom https www cnblogs com themost p 6603409 html 使用Python写文件的时候 xff0c 或者将网络数据流写入到本地文件的时候 xff0c 大部分情况下会遇到 xff1a Unicode
  • java读取文件内容

    直接上代码 两个类 一个工具类 一个测试类 工具类代码 package org example study util import lombok extern slf4j Slf4j import org apache commons la
  • iOS 微信发布 8.0.12 正式版,寂寞来袭

    今天微信突然更新8 0 12正式版 我马上更新 更新完后并没有发现什么新功能 我就赶紧发文告诉大家 大家快去更新 更新看看这次更新了什么 我在AppStore商店更新完毕后就大概看了一下 并没有什么实质性的功能 可能内测功能还是内测人使用吧
  • 手把手教你:解决python UnicodeDecodeError: 'gb2312' codec can't decode问题

    问题 UnicodeDecodeError gb2312 codec can t decode bytes in position 2 3 illegal multibyte sequence 原因 python在做将普通字符串转换为uni
  • 17:UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence

    菜鸟学python习题17运行错误 我的 直接在open里加了一个 errors ignore 即可 第一个人 使用python的时候经常会遇到文本的编码与解码问题 其中很常见的一种解码错误如题目所示 下面介绍该错误的解决方法 将 gbk
  • 锟斤拷?UTF-8与GBK互转,为什么会乱码?

    作为一名程序员 肯定有被乱码困扰的时候 真到了百思不得其解的时候 就会觉得 英文程序员真幸福 但其实只要明白编码之间的转换规律 其实乱码so easy 我们知道 计算机存储数据都是2进制 就是0和1 那么这么多的字符就都需要有自己对应的0和
  • VS9(vs2008) 下 Debug 显示 UTF8 字符串

    默认的 VC调试器只能正常显示ANSI字符串及UNICODE字符串 而UTF 8字符串及其他格式则无法显示 这里无需编写插件及修改配置文件 只需要将要显示的字符串拉到Watch中 并在变量后面添加 s8即可显示 gt 同样类型的功能也应该很
  • 关于错误:编码GBK 的不可映射字符 问题的解决

    Created by winston on September 25 2019 关于 错误 编码GBK 的不可映射字符 问题的解决 1 问题说明 现需要将 java文件转 class文件 直接使用如下命令 javac d xxx java

随机推荐

  • 小程序的节流防抖函数

    小程序的节流防抖函数 首先在util js中定义节流防抖的方法 函数节流 时间差 如果interval不传 则默认300ms function throttle fn interval var enterTime 0 触发的时间 var g
  • TOWE一转二家用无线遥控插座,让生活变得简单

    随着科技的进步 人们的生活方式正在发生改变 越来越多的智能家居产品进入我们的生活中 为我们的生活带来了极大的便利 无线遥控插座作为一种集成了无线遥控技术与插座功能的创新产品 在家庭 办公 商业场景有着广泛的应用 同为科技 TOWE 一转二家
  • kali-linux学习笔记及经验总结(持更)

    首先 Kali liux是什么 说白了就是一个linux操作系统 它与其它的Linux系统最大的不同就是它预装了14大类 如下图 300多个安全测试和渗透软件 包括大名鼎鼎的NMap 端口扫描器 Wireshark 数据包分析器 Aircr
  • 深入学习 Redis - 分布式锁底层实现原理,以及实际应用

    目录 一 Redis 分布式锁 1 1 什么是分布式锁 1 2 分布式锁的基础实现 1 2 1 引入场景 1 2 2 基础实现思想 1 2 3 引入 setnx 1 3 引入过期时间 1 4 引入校验 id 1 5 引入 lua 脚本 1
  • 【ARIMA-WOA-LSTM】差分自回归移动平均方法-鲸鱼优化算法-LSTM预测研究(python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码实现 1 概述 差分自回归移动平均模型 ARIMA 是一种
  • 数据库应用:MySQL高级语句(二)

    目录 一 理论 1 表连接查询 2 视图 3 联集 4 交集值 5 无交集值 6 CASE 7 空值 NULL 和无值 的区别 8 正则表达式 精确查询 二 实验 1 表连接查询 2 视图 3 联集 4 交集值 5 无交集值 6 CASE
  • linux系统/proc目录下的子目录功能

    proc是一个虚拟文件系统 其下面的文件不是真实存在的 不占用实际存储空间 proc cmdline 显示内核启动的命令行 proc cpuinfo 显示系统cpu的信息 proc filesystems 显示当前注册了的文件系统列表 no
  • 计算机配置很不错但是卡,高手告诉你win10电脑明明配置很好却卡顿的详尽处理手法...

    我们最常用的系统就是win10系统 因为它非常优秀使用非常方便 但即便如此 我们在使用过程中还是会或多或少遇到一些比如win10电脑明明配置很好却卡顿的问题 有不少对系统很了解的网友 也许都不太会解决这个win10电脑明明配置很好却卡顿的问
  • 白话入门目标检测(一)

    一 目标检测网络的基本构成 Backbone Neck Detection head Backbone的目标是提取图像中的特征 但是仅仅提取特征是无法完成目标检测的任务的 需要后续的网络从这些提取到的特征中检测目标目标的位置和类别 后续的网
  • 程序员带新人的步骤

    目录 1 介绍工作环境 2 吩咐任务及介绍任务背景 3 任务解读及分享自己的经验及做法 4 定期查看任务进度是否符合预期 以及指出问题提出建议 1 介绍工作环境 介绍公司的环境 再到部门环境 工作小组的各个人负责的环境 再到详细他的工作岗位
  • 深度学习基础:线性回归、感知机、反向传播和梯度下降法

    当代机器学习领域中 线性回归和多层感知机是最常用的基本模型 在深度学习中 这些模型通常是由多个神经网络层次组成 其中前向传播和反向传播是两个非常重要的步骤 本文将介绍线性回归 多层感知机 前向传播和反向传播的基本原理 线性回归 线性回归是一
  • 冷门但好看的 VSCode 主题推荐

    给大家分享一些冷门的VScode配色 这款颜色主题的特点是颜色比较明亮 也比较简洁干净 适合喜欢高对比度或者不喜欢太过花里胡哨颜色主题的朋友使用 Ayu 有 light migrate 和 dark 三种色调 包含了深色和浅色模式 Bear
  • 10行代码学会在 Java 中 压缩 Excel 中的图片

    Spire XLS for Java是专业的Java Excel API 使开发人员无需使用Microsoft Office或Microsoft Excel即可创建 管理 操作 转换和打印Excel工作表 本文介绍如何使用Spire XLS
  • 用Beamer制作幻灯片(卷二 色彩篇)

    在用Beamer类制作幻灯片卷一里讲解了怎么使用Latex的简单的类来制作幻灯片 只是给了基本的怎么制作幻灯片的一个大体框架 但是一个很好的幻灯片远远不止这些功能 beamer的功能还有很多 今天要介绍的内容就是给幻灯片增加一些绚丽的效果
  • 服务器的作用

    服务器的作用 1 服务器就好像是一个电话总台一样 而其他的网络设备就像是公共电话 所有的数据传输都要经过服务器的处理 2 服务器作为一个网络节点 为用户提供数据处理服务 最常见的就是使用服务器为自己搭建一个网站 3 服务器运算能力强 可以长
  • C语言实现一个整型计算器的不同方法

    文章目录 一 实现一个整型计算器 二 运用函数指针数组来实现整型计算器 也就是转移表 三 运用回调函数实现整型计算器 一 实现一个整型计算器 代码如下 include
  • layui显示表格数据的id的两种形式

    1 获取数据库表字段id field id title 用户ID width 100 fixed left align center templet function d return d id 2 templet属性获得id为 title
  • 【大模型】—LangChain开源框架介绍

    大模型 LangChain开源框架介绍 2023年可以说是AI大语言模型发展元年 随着OpenAI的ChatGPT和GPT 4的发布 点燃了人工智能大语言模型的发展浪潮 各大科技公司纷纷推出了自家的大语言模型产品 各国更是将大语言模型的发展
  • springboot 跨域过滤器配置

    添加maven包依赖
  • gbk to utf8 utf8 to gbk

    My Study About My Learn or Study etc GBK和UTF8之间的转换 By Cnangel on October 8 2012 10 10 AM No Comments 关于GBK和UTF 8之间的转换 很多