字符串转码
来源:互联网 发布:高德导航 gps端口 编辑:程序博客网 时间:2024/05/16 07:00
转码:utf-8和gbk
问题描述:字符串编码的互转
main.c
#include<stdio.h>#include<locale.h>#include<stdlib.h>#include<string.h>/** @brief 转码:utf-8到gbk* @param gbkStr 转码结果存放地址* @param srcUtf8Str 源字符串* @param maxGbkStrlen gbkStr最大长度* @return 返回结果字符串长度。 -1, fail; >0, success*/int utf82Gbk(char* gbkStr, const char* srcUtf8Str, int maxGbkStrLen){//思路:utf8 -> unicode -> gbk if(NULL == srcUtf8Str) { printf("Bad parameter !\n"); return -1; } if(NULL == setlocale(LC_ALL, "zh_CN.utf8")) //设置转换为unicode前的码,当前为utf8编码 { printf("Bad parameter !\n"); return -1; } int unicodeLen = mbstowcs(NULL, srcUtf8Str, 0);//计算转换后的长度 if(unicodeLen <= 0) { printf("Can not transfer ! !\n"); return -1; } wchar_t* unicodeStr = (wchar_t*)calloc(sizeof(wchar_t), unicodeLen + 1); mbstowcs(unicodeStr, srcUtf8Str, strlen(srcUtf8Str));//将utf8转换为unicode if(NULL == setlocale(LC_ALL, "zh_CN.gbk"))//设置unicode转换后的码,当前为gbk { printf("Bad parameter !\n"); return -1; } int gbkLen = wcstombs(NULL, unicodeStr, 0);//计算转换后的长度 if(gbkLen <= 0) { printf("Bad parameter !\n"); return -1; }else if(gbkLen >= maxGbkStrLen)//判断空间是否足够 { printf("gbkStr memory not enough !\n"); return -1; } wcstombs(gbkStr, unicodeStr, gbkLen); gbkStr[gbkLen] = 0; free(unicodeStr); return gbkLen;}/** @brief 转码:gbk到utf-8* @param utf8Str 转码结果存放地址* @param srcGbkStr 源字符串* @param maxUtf8Strlen gbkStr最大长度* @return 返回结果字符串长度。 -1, fail; >0, success*/int gbk2Utf8(char* utf8Str, const char* srcGbkStr, int maxUtf8StrLen){//思路:gbk -> unicode -> utf-8 if(NULL == srcGbkStr) { printf("Bad parameter !\n"); return -1; } if(NULL == setlocale(LC_ALL, "zh_CN.gbk")) { printf("Bad parameter !\n"); return -1; } int unicodeLen = mbstowcs(NULL, srcGbkStr, 0); if(unicodeLen <= 0) { printf("Can not transfer !!\n"); return -1; } wchar_t* unicodeStr = (wchar_t*)calloc(sizeof(wchar_t), unicodeLen + 1); mbstowcs(unicodeStr, srcGbkStr, strlen(srcGbkStr)); if(NULL == setlocale(LC_ALL, "zh_CN.utf8")) { printf("Bad parameter !\n"); return -1; } int utf8Len = wcstombs(NULL, unicodeStr, 0); if(utf8Len <= 0) { printf("Can not transfer !!\n"); return -1; }else if(utf8Len >= maxUtf8StrLen){ printf("utf8Str memory not enough !\n"); return -1; } wcstombs(utf8Str, unicodeStr, utf8Len); utf8Str[utf8Len] = 0; free(unicodeStr); return utf8Len;}int main(void){ char str[] = "星期一\n"; puts(str); char gbkStr[32]; utf82Gbk(gbkStr, str, 32); puts(gbkStr); char utf8Str[32]; gbk2Utf8(utf8Str, gbkStr, 32); puts(utf8Str); return 0;}
0 0
- 字符串转码
- 将字符串转码
- java字符串转码
- ASCII码转字符串
- java 字符串转码
- 字符串转码
- 封装字符串转码
- 字符串转码
- 字符串转码
- 将字符串转码
- 字符串转码
- 字符串转码问题
- java字符串转码
- 字符串转Ascii码与Ascii码转字符串
- BCD码转十进制字符串
- iOS 字符串转码+解压
- 字符串转码工具类
- HDU 1020(字符串转码)
- 网络爬虫、spider程序、网络蜘蛛
- pasteHTML兼容ie,firefox,chrome等浏览器
- TCP底层实现
- Servlet教程(三) Servlet的生命周期
- 机器学习(四):分类算法之朴素贝叶斯
- 字符串转码
- java invoke --反射
- 犀牛书随手记 -02
- LVS Nginx HAProxy 优缺点
- gcc____make和makefile _____CMake和CMakeLists.txt___之间有何关系
- 数据库第四章
- LeetCode Letter Combinations of a Phone Number
- 欢迎使用CSDN-markdown编辑器
- 判断JavaScript对象为null或者属性为空的方法