场景:

1.有些字符串编码是unicode的,但是第3方库需要的是utf8字符串,这时候就需要unicode转utf8的接口了。

//unicodeתutf8
#include <iostream>
#include <fstream>using namespace std;#define MAX_LENGTH 1024int UniCharToUTF8(wchar_t UniChar, char* OutUTFString)
{int UTF8CharLength = 0;if (UniChar < 0x80){ if ( OutUTFString )OutUTFString[UTF8CharLength++] = (char)UniChar;elseUTF8CharLength++;}else if(UniChar < 0x800){if ( OutUTFString ){OutUTFString[UTF8CharLength++] = 0xc0 | ( UniChar >> 6 );OutUTFString[UTF8CharLength++] = 0x80 | ( UniChar & 0x3f );}else{UTF8CharLength += 2;}}else if(UniChar < 0x10000 ){if ( OutUTFString ){OutUTFString[UTF8CharLength++] = 0xe0 | ( UniChar >> 12 );OutUTFString[UTF8CharLength++] = 0x80 | ( (UniChar >> 6) & 0x3f );OutUTFString[UTF8CharLength++] = 0x80 | ( UniChar & 0x3f );}else{UTF8CharLength += 3;}}else if( UniChar < 0x200000 ){if ( OutUTFString ){OutUTFString[UTF8CharLength++] = 0xf0 | ( (int)UniChar >> 18 );OutUTFString[UTF8CharLength++] = 0x80 | ( (UniChar >> 12) & 0x3f );OutUTFString[UTF8CharLength++] = 0x80 | ( (UniChar >> 6) & 0x3f );OutUTFString[UTF8CharLength++] = 0x80 | ( UniChar & 0x3f );}else{UTF8CharLength += 4;}}return UTF8CharLength;
}void main()
{FILE* pFile=fopen("E:/project/11111/Debug/11.txt","r");fseek(pFile, 2, SEEK_SET);long int file_length = 0;int index = 1;char* pBuf;pBuf = (char*)calloc(1, MAX_LENGTH);char* curr_buf;wchar_t w_ch=fgetwc(pFile);while(!feof(pFile)){   if(file_length + 6 > index * MAX_LENGTH){index++;realloc(pBuf, index * MAX_LENGTH);}curr_buf = pBuf + file_length;file_length += UniCharToUTF8(w_ch, curr_buf);printf("%s", curr_buf);w_ch=fgetwc(pFile);   }pBuf[file_length] = '\0';fclose(pFile);getchar();
}

unicode转utf8相关推荐

  1. C++中Ansi、Unicode、UTF8字符串之间的转换和写入

    转自: http://dark0729.blogbus.com/logs/51496111.html Ansi字符串我们最熟悉,英文占一个字节,汉字2个字节,以一个\0结尾,常用于txt文本文件 Un ...

  2. Unicode 和 UTF-8关系

    unicode 就是 "与存储无关的表示",utf-8 就是 "二进制表示".一句话,utf8是对unicode字符集进行编码的一种编码方式,utf8是给uni ...

  3. 三种字符编码:ASCII、Unicode和UTF-8

    原文:三种字符编码:ASCII.Unicode和UTF-8 什么是字符编码? 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字 ...

  4. 分析Unicode和UTF-8

    首先说明一下现在常用的一些编码方案: 1.在中国,大陆最常用的就是GBK18030编码,除此之外还有GBK,GB2312,这几个编码的关系是这样的. 最早制定的汉字编码是GB2312,包括6763个汉 ...

  5. unicode,ansi,utf-8,unicode big endian编码的区别

    为什么80%的码农都做不了架构师?>>>    随便说说字符集和编码 快下班时,爱问问题的小朋友Nico又问了一个问题: "sqlserver里面有char和nchar,那 ...

  6. Unicode和UTF-8的关系

    Unicode和UTF-8的关系 1. ASCII码 我 们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种 ...

  7. Unicode 和 UTF-8 有何区别?

    Unicode符号范围 (一个字符两个字节)     | UTF-8编码方式 (十六进制)     | (二进制) ---------------------– 这儿有四个字节 从-----00 00 ...

  8. [转]各种编码ANSI、GB2312、GBK、GB18030、UNICODE以及UTF-8傻傻分不清!

    计算机编程中的编码一直是让新手非常头疼的问题,特别是 GBK.GB2312.UTF-8 这三个比较常见的网页编码的区别,更是让许多新手晕头转向,怎么解释也解释不清楚,看一遍貌似懂了,但实际使用的时候又 ...

  9. 字符编码的发展(ASCII、Unicode、utf-8)

    最近一直在看廖雪峰老师的python网上教程,python内容简单易理解,就没整理,但是字符串编码作为一直困扰自己的问题,看了几遍文章,最终还是将其整理如下,本篇博客总结自廖雪峰老师的网上教程:htt ...

  10. 字符编码笔记:ASCII,Unicode和UTF-8

    很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称为"字节". 再后来,他们又做了一些可以处理 ...

最新文章

  1. 创建细分客户的无监督学习项目
  2. 防范SQL注入的几种方法 4
  3. JavaScript的运动——加速运动篇
  4. mysql初体验学习笔记_MySQL数据库初体验
  5. 【图像处理】——特征匹配(SIFT特征检测器+FLANN特征匹配方法+KNN近邻最优匹配筛选)——cv.xfeatures2d.SIFT_create()sift.detectAndCompute
  6. JavaScript中对象的属性:如何遍历属性
  7. Rstudio 1.2 新功能介绍
  8. STC学习:串口通信
  9. C++中四种线程同步的方法
  10. 360张图围绕成为3d_3D设计将在10分钟内成为专业人士
  11. 计算机维修logo在线设计,硕思logo设计师电脑版
  12. 北京注册的公司如何缴纳公积金
  13. 萌系外表+丰富功能,i宝机器人成CES人气展品
  14. 十款免费的Web前端开发工具
  15. 3、浙江移动网页Post登陆分析RSA算法【Post/Js逆向笔记】
  16. 台式计算机截图快捷键,电脑截屏的快捷键是什么
  17. 4.6 定位解算和1PPS时标支持
  18. 音视频系列--音频基本理论
  19. 阿里云获取域名和SSL证书
  20. 星云服务器装系统,装win10,装win10系统-总算知道

热门文章

  1. 使用万能表单解析程序将表单数据封装成ListMap
  2. python爬虫工程师 成长之路八 Selenium WebDriver
  3. 世道变了,微软连Java都支持了
  4. 第七届“创客中国”物联网中小企业创新创业大赛决赛落幕,云蝠智能荣获二等奖
  5. 记录uniapp时间戳转换
  6. android万能播放器,Android万能视频播放器05-音视频同步
  7. Android音频系统的改进设想和展望 PulseAudio介绍
  8. NXP(恩智浦)iMX8M Plus 处理器介绍
  9. 很久以前用vue全家桶写的一个仿Mac桌面,挺有意思的
  10. html函数参数数组遍历,JavaScript foreach遍历数组