#include <stdint.h>
// Unicode 转 UTF-8
int unicode_to_utf8(uint8_t *utf8Buffer, uint16_t *unicodeBuffer, int unicodeNum, uint8_t flag){
int utf8Length = 0;
uint16_t unicode;
while(unicodeNum-- > 0){
unicode = *(unicodeBuffer++);
if(unicode <= 0x007f){
utf8Buffer[0] = unicode & 0x007f;
utf8Buffer += 1;
utf8Length += 1;
}else if(unicode <= 0x07ff){
utf8Buffer[0] = 0xc0 | ((unicode>>6) & 0x001f); //6-10位
utf8Buffer[1] = 0x80 | (unicode & 0x003f); //0-5位
utf8Buffer += 2;
utf8Length += 2;
}else{
utf8Buffer[0] = 0xe0 | ((unicode>>12) & 0x000f); //12-15位
utf8Buffer[1] = 0x80 | ((unicode>>6) & 0x003f); //6-11位
utf8Buffer[2] = 0x80 | (unicode & 0x003f); //0-5位
utf8Buffer += 3;
utf8Length += 3;
}
}
if(flag){
utf8Buffer[0] = 0;
return utf8Length + 1;
}else{
return utf8Length;
}
}
// UTF-8 转 Unicode
int utf8_to_unicode(uint16_t *unicodeBuffer, uint8_t *utf8Buffer, int utf8Length, uint8_t flag){
int unicodeNum = 0;
while(utf8Length > 0){
if(utf8Buffer[0] < 0xc0){
unicodeBuffer[unicodeNum++] = utf8Buffer[0];
utf8Buffer += 1;
utf8Length -= 1;
}else if(utf8Buffer[0] < 0xe0){
unicodeBuffer[unicodeNum++] = ((uint16_t)(utf8Buffer[0] & 0x1f) << 6) | (utf8Buffer[1] & 0x3f);
utf8Buffer += 2;
utf8Length -= 2;
}else if(utf8Buffer[0] < 0xf0){
unicodeBuffer[unicodeNum++] = ((uint16_t)(utf8Buffer[0] & 0x0f) << 12) | ((utf8Buffer[1] & 0x3f) << 6) | (utf8Buffer[2] & 0x3f);
utf8Buffer += 3;
utf8Length -= 3;
}else{
utf8Buffer += 1;
utf8Length -= 1;
}
}
if(flag){
unicodeBuffer[unicodeNum++] = 0;
}
return unicodeNum + unicodeNum;
}
代码片段: Unicode与UTF-8互转
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 1、简述 最近在发送网络请求时遇到了中文字符乱码的问题,在代码中调试字符正常,用抓包工具抓的包中文字符显示正常,就...
- 什么是Unicode字符集?简单地说,它就是把全世界人类发明和使用的现有的所有字符进行了集中收集和逐一编码,这个过...
- 1.什么是Unicode? unicode官网的简介 Unicode给每一个符号都给予一个独一无二的编码。 2.U...
- utf和Unicode编码到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是...