如何实现mbcs转换unicode,unicode转换成utf8

时间:2022-11-30 20:17:59
各位大哥,小弟现在要想实现x509证书显示中文的问题,但要实现汉字(mbcs)编码转换成unicode编码,unicode编码转换成utf8编码的过程,但小弟现在没有一点头绪,不知道那位大哥能否有什么高见或代码让小弟好好学习学习,最好是有mbcs到unicode到utf8,utf8到unicode再到mbcs编码转换的代码哟


谢谢
谢谢

小弟的开发平台linux

11 个解决方案

#1


函数 iconv()
查查帮助吧

#2


我查了一下iconv,它要有相应的码表支持吧

#3


我刚才度过了
不行
如果要用iconv则要调用iconv_open
但我现在要把这个功能做到一个函数里呀
类型如下函数

int mbcs2utf8(char **des, char *src, int ilen)
{
int inlen, outlen;
iconv_t cd; 
size_t n; 

inlen = ilen + 1;
if((cd = iconv_open(??????, ??????)) == (iconv_t)-1)
return -1;

if((n = iconv(cd, &src, &inlen, des, &outlen))  ==  (size_t)(-1)) 

        return -1; 


iconv_close(cd); 

return outlen;
}

#4


help me

谢谢
谢谢

#5


确认你的系统中有汉字(mbcs)编码库?

#6


没有编码库
但我不知道怎么装
是那个字库呢

还有就是那个
if((cd = iconv_open(??????, ??????)) == (iconv_t)-1)
里面参数我不知道怎么写呀


谢谢
谢谢
实在是谢谢了

#7


应该可以不用这种方式的
应该可以直接做编码转换的吧


那位大哥做过呀
谢谢
谢谢

#8


int u2g(char *inbuf,int inlen,char *outbuf,int outlen)

{

return CodeConvert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);

}


int CodeConvert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)

{

iconv_t cd;
int rc;

char **pin = &inbuf;
char **pout = &outbuf;



cd = iconv_open(to_charset,from_charset);
if (cd==0) 

return -1;

memset(outbuf,0,outlen);


if (iconv(cd, (const char **)pin, (size_t*)&inlen, pout, (size_t*)&outlen)==-1) 
return -1;

iconv_close(cd);

return 0;

}

#9


谢谢
谢谢这位大哥

明天再来写程序了
今天麻烦各位大哥了

#10


这么大哥,不好意思
我昨天测试了一下
程序执行到iconv函数时总是要返回-1
我不知道错在哪儿呀

谢谢
谢谢

#11


#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include </usr/include/iconv.h>
#include </usr/include/strings.h> 


int CodeConvert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)

{

iconv_t cd;

char **pin = &inbuf;
char **pout = &outbuf;



cd = iconv_open(to_charset,from_charset);
if (cd==0) 

return -1;

memset(outbuf,0,outlen);


if (iconv(cd, (const char **)pin, (size_t*)&inlen, pout, (size_t*)&outlen)==-1) 
return -1;

iconv_close(cd);

return 0;

}

int u2g(char *inbuf,int inlen,char *outbuf,int outlen)

{
return CodeConvert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}

int main()
{
char *iput = "abc";
char obuf[128];
int ilen = 3, olen = 0, val;

memset(obuf, 0x00, 128);

val = u2g(iput, ilen, obuf, olen);

fprintf(stderr, "val = %d\n", val);
fprintf(stderr, "obuf = %s\n", obuf, olen);
fflush(stderr);

return 0;
}

#1


函数 iconv()
查查帮助吧

#2


我查了一下iconv,它要有相应的码表支持吧

#3


我刚才度过了
不行
如果要用iconv则要调用iconv_open
但我现在要把这个功能做到一个函数里呀
类型如下函数

int mbcs2utf8(char **des, char *src, int ilen)
{
int inlen, outlen;
iconv_t cd; 
size_t n; 

inlen = ilen + 1;
if((cd = iconv_open(??????, ??????)) == (iconv_t)-1)
return -1;

if((n = iconv(cd, &src, &inlen, des, &outlen))  ==  (size_t)(-1)) 

        return -1; 


iconv_close(cd); 

return outlen;
}

#4


help me

谢谢
谢谢

#5


确认你的系统中有汉字(mbcs)编码库?

#6


没有编码库
但我不知道怎么装
是那个字库呢

还有就是那个
if((cd = iconv_open(??????, ??????)) == (iconv_t)-1)
里面参数我不知道怎么写呀


谢谢
谢谢
实在是谢谢了

#7


应该可以不用这种方式的
应该可以直接做编码转换的吧


那位大哥做过呀
谢谢
谢谢

#8


int u2g(char *inbuf,int inlen,char *outbuf,int outlen)

{

return CodeConvert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);

}


int CodeConvert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)

{

iconv_t cd;
int rc;

char **pin = &inbuf;
char **pout = &outbuf;



cd = iconv_open(to_charset,from_charset);
if (cd==0) 

return -1;

memset(outbuf,0,outlen);


if (iconv(cd, (const char **)pin, (size_t*)&inlen, pout, (size_t*)&outlen)==-1) 
return -1;

iconv_close(cd);

return 0;

}

#9


谢谢
谢谢这位大哥

明天再来写程序了
今天麻烦各位大哥了

#10


这么大哥,不好意思
我昨天测试了一下
程序执行到iconv函数时总是要返回-1
我不知道错在哪儿呀

谢谢
谢谢

#11


#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include </usr/include/iconv.h>
#include </usr/include/strings.h> 


int CodeConvert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen)

{

iconv_t cd;

char **pin = &inbuf;
char **pout = &outbuf;



cd = iconv_open(to_charset,from_charset);
if (cd==0) 

return -1;

memset(outbuf,0,outlen);


if (iconv(cd, (const char **)pin, (size_t*)&inlen, pout, (size_t*)&outlen)==-1) 
return -1;

iconv_close(cd);

return 0;

}

int u2g(char *inbuf,int inlen,char *outbuf,int outlen)

{
return CodeConvert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}

int main()
{
char *iput = "abc";
char obuf[128];
int ilen = 3, olen = 0, val;

memset(obuf, 0x00, 128);

val = u2g(iput, ilen, obuf, olen);

fprintf(stderr, "val = %d\n", val);
fprintf(stderr, "obuf = %s\n", obuf, olen);
fflush(stderr);

return 0;
}