代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C/C++
】
libiconv字符编码处理及判断字符串是否为utf8
作者:
珍灵
/ 发布于
2018/3/26
/
827
#include <stdio.h> #include <string.h> #include <iconv.h> #include <stdlib.h> #include <stdbool.h> bool IsUTF8(const void* pBuffer, long size) { bool IsUTF8 = true; unsigned char* start = (unsigned char*)pBuffer; unsigned char* end = (unsigned char*)pBuffer + size; while (start < end) { if (*start < 0x80) // (10000000): 值小于0x80的为ASCII字符 { start++; } else if (*start < (0xC0)) // (11000000): 值介于0x80与0xC0之间的为无效UTF-8字符 { IsUTF8 = false; break; } else if (*start < (0xE0)) // (11100000): 此范围内为2字节UTF-8字符 { if (start >= end - 1) { break; } if ((start[1] & (0xC0)) != 0x80) { IsUTF8 = false; break; } start += 2; } else if (*start < (0xF0)) // (11110000): 此范围内为3字节UTF-8字符 { if (start >= end - 2) { break; } if ((start[1] & (0xC0)) != 0x80 || (start[2] & (0xC0)) != 0x80) { IsUTF8 = false; break; } start += 3; } else { IsUTF8 = false; break; } } return IsUTF8; } int ChangeCode( const char* pFromCode, const char* pToCode, const char* pInBuf, size_t* iInLen, char* pOutBuf, size_t* iOutLen ); int main( int argc, char* argv[] ) { char sInBuf[100]; char sOutBuf[100]; size_t iInLen = 0; size_t iOutLen = 100; int iRet; //char *orign_str = "0xe4b881e4baae"; char *orign_str = "0xC0D6CAD3"; int pos = 0; char str[100] = {0}; orign_str = orign_str+2; for(;;pos++) { if(pos>99 || orign_str[2*pos] == 0 || orign_str[2*pos+1] == 0) break; sscanf(orign_str+2*pos, "%2x", &str[pos]); } if(IsUTF8(str, strlen(str))){ printf("UTF-8, str=[%s]\n", str); printf("\n"); }else{ strcpy( sInBuf, str); memset( sOutBuf, 0x00, 100 ); iInLen = strlen( sInBuf ); iRet = ChangeCode( "GBK", "UTF-8", sInBuf, &iInLen, sOutBuf, &iOutLen ); printf("Gbk dddddddddd %s\n",sOutBuf); } return 0; } int ChangeCode( const char* pFromCode, const char* pToCode, const char* pInBuf, size_t* iInLen, char* pOutBuf, size_t* iOutLen ) { int iRet; iconv_t hIconv = iconv_open( pToCode, pFromCode ); if ( -1 == (int)hIconv ) { return -1; } iRet = iconv( hIconv, (const char**)(&pInBuf), iInLen, (char**)(&pOutBuf), iOutLen ); iconv_close( hIconv ); return iRet; }
试试其它关键字
同语言下
.
C分鱼问题
.
链表
.
最大连续和
.
编码字符串
.
libiconv字符编码处理及判断字符串是否为utf8
.
一组数中两两二元组,差最大有几对,差最小呢?(数组
.
通过管道获取一个进程的执行状态
.
多关键字排序
.
字符串字典序排序
.
3元一次方程(牛顿迭代法求方程的根)
可能有用的
.
C分鱼问题
.
链表
.
最大连续和
.
编码字符串
.
libiconv字符编码处理及判断字符串是否为utf8
.
一组数中两两二元组,差最大有几对,差最小呢?(数组
.
通过管道获取一个进程的执行状态
.
多关键字排序
.
字符串字典序排序
.
3元一次方程(牛顿迭代法求方程的根)
珍灵
贡献的其它代码
(
6
)
.
libiconv字符编码处理及判断字符串是否为utf8
.
将List
转为DataTable
.
#增加一个字段
.
复制文本框或者隐藏域中的内容
.
关闭SQL Server 数据库所有使用连接
.
RTX(腾讯通) 接口应用 能实现与OA接口
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3