不是GBK转到UTF-8哦
是求一个汉字的GBK编码或者UTF-8
例如啊的GBK编码是BOA1
不知道如何实现
16 个解决方案
#1
要么用系统的api要么用iconv。
C标准库没这个东西。
C标准库没这个东西。
#2
没人知道吗
#3
1楼答案已经很清楚了。
如果crt没有的就不算标准C,那就自己写吧。
#4
iconv函数我看过了,但是我看了好多例子都不明白如何达到这样的效果
cd = iconv_open(to_charset,from_charset);
iconv(cd,pin,&inlen,pout,&outlen)
pin="啊"的时候
保证输出pout等于BOA1
谁能给我个例子呢?
输入字符串"啊"
输出 BOA1呢
cd = iconv_open(to_charset,from_charset);
iconv(cd,pin,&inlen,pout,&outlen)
pin="啊"的时候
保证输出pout等于BOA1
谁能给我个例子呢?
输入字符串"啊"
输出 BOA1呢
#5
在OS上,通常会有一种默认内码.所有的字符都按这种内码来编码.
比如win32上,如果使用MBCS字符时会按语言选择当地的默认内码,比如简体中文使用GB2312编码.使用宽字符时则是UTF16编码.而UTF8只是UCS的一种表达形式,可以很简单的从UTF16转换得到.
而在linux上,现在多使用utf8做为系统默认内码.
楼主所要的就是这些字符的"值"而已.
所以你只要把输入转到相应的内码,然后给出这个字符的值就可以了.
如:
unsigned char s[] = "啊";
printf( "%02X%02X", s[0], s[1] ); // 输出B0A1
比如win32上,如果使用MBCS字符时会按语言选择当地的默认内码,比如简体中文使用GB2312编码.使用宽字符时则是UTF16编码.而UTF8只是UCS的一种表达形式,可以很简单的从UTF16转换得到.
而在linux上,现在多使用utf8做为系统默认内码.
楼主所要的就是这些字符的"值"而已.
所以你只要把输入转到相应的内码,然后给出这个字符的值就可以了.
如:
unsigned char s[] = "啊";
printf( "%02X%02X", s[0], s[1] ); // 输出B0A1
#6
难道你要的是这个 ?
int main()
{
char xx[]="啊";
printf( "%x%x" , (unsigned char)xx[0] , (unsigned char)xx[1] );
}
#7
对哦,GBK我要的就是这个,UTF-8怎么实现呢?
#8
我用的是linux 系统我看了下默认编码的确是UTF-8
#9
int main ()
{
char xx[] = "啊";
printf ("%x%x%x", (unsigned char) xx[0], (unsigned char) xx[1], (unsigned char) xx[2] );
}
分别用 -fexec-charset=utf-8
-fexec-charset=gbk
这两个编译选项试试结果
#10
在linux 上我用你的程序这样编译gcc -g encode.c -fexec-charset=utf-8 -o encode
输出结果:
b0a10
郁闷哦,怎么不是UTF-8呢
输出结果:
b0a10
郁闷哦,怎么不是UTF-8呢
#11
这样呢
iconv -fgbk -tutf-8 encode.c > encode_utf8.c
gcc encode_utf8.c -o encode_utf8
iconv -fgbk -tutf-8 encode.c > encode_utf8.c
gcc encode_utf8.c -o encode_utf8
#12
学习了
#13
不是GBK转到UTF-8哦
是求一个汉字的GBK编码或者UTF-8
====
这有区别吗?
是求一个汉字的GBK编码或者UTF-8
====
这有区别吗?
#14
先算一个汉字UTF8码占几个字节:
int Count( char *buf)/*计算UTF8汉字占几个字节*/
{
char ptr;
int num = 0;
char temp = 0x80;
ptr = buf[0];
while(temp & ptr)
{
num++;
ptr<<=1;
}
if(num == 0)
num = 1;
return num;
}
算出一个UTF8字后 剩下的就是将buf的num个字节转化成16进制输出来就行了
int Count( char *buf)/*计算UTF8汉字占几个字节*/
{
char ptr;
int num = 0;
char temp = 0x80;
ptr = buf[0];
while(temp & ptr)
{
num++;
ptr<<=1;
}
if(num == 0)
num = 1;
return num;
}
算出一个UTF8字后 剩下的就是将buf的num个字节转化成16进制输出来就行了
#15
啊
GBK→Unicode→UTF8
0xB0A1→0x554A→0xE5958A
GBK→Unicode→UTF8
0xB0A1→0x554A→0xE5958A
#16
后来自己解决了
#1
要么用系统的api要么用iconv。
C标准库没这个东西。
C标准库没这个东西。
#2
没人知道吗
#3
1楼答案已经很清楚了。
如果crt没有的就不算标准C,那就自己写吧。
#4
iconv函数我看过了,但是我看了好多例子都不明白如何达到这样的效果
cd = iconv_open(to_charset,from_charset);
iconv(cd,pin,&inlen,pout,&outlen)
pin="啊"的时候
保证输出pout等于BOA1
谁能给我个例子呢?
输入字符串"啊"
输出 BOA1呢
cd = iconv_open(to_charset,from_charset);
iconv(cd,pin,&inlen,pout,&outlen)
pin="啊"的时候
保证输出pout等于BOA1
谁能给我个例子呢?
输入字符串"啊"
输出 BOA1呢
#5
在OS上,通常会有一种默认内码.所有的字符都按这种内码来编码.
比如win32上,如果使用MBCS字符时会按语言选择当地的默认内码,比如简体中文使用GB2312编码.使用宽字符时则是UTF16编码.而UTF8只是UCS的一种表达形式,可以很简单的从UTF16转换得到.
而在linux上,现在多使用utf8做为系统默认内码.
楼主所要的就是这些字符的"值"而已.
所以你只要把输入转到相应的内码,然后给出这个字符的值就可以了.
如:
unsigned char s[] = "啊";
printf( "%02X%02X", s[0], s[1] ); // 输出B0A1
比如win32上,如果使用MBCS字符时会按语言选择当地的默认内码,比如简体中文使用GB2312编码.使用宽字符时则是UTF16编码.而UTF8只是UCS的一种表达形式,可以很简单的从UTF16转换得到.
而在linux上,现在多使用utf8做为系统默认内码.
楼主所要的就是这些字符的"值"而已.
所以你只要把输入转到相应的内码,然后给出这个字符的值就可以了.
如:
unsigned char s[] = "啊";
printf( "%02X%02X", s[0], s[1] ); // 输出B0A1
#6
难道你要的是这个 ?
int main()
{
char xx[]="啊";
printf( "%x%x" , (unsigned char)xx[0] , (unsigned char)xx[1] );
}
#7
对哦,GBK我要的就是这个,UTF-8怎么实现呢?
#8
我用的是linux 系统我看了下默认编码的确是UTF-8
#9
int main ()
{
char xx[] = "啊";
printf ("%x%x%x", (unsigned char) xx[0], (unsigned char) xx[1], (unsigned char) xx[2] );
}
分别用 -fexec-charset=utf-8
-fexec-charset=gbk
这两个编译选项试试结果
#10
在linux 上我用你的程序这样编译gcc -g encode.c -fexec-charset=utf-8 -o encode
输出结果:
b0a10
郁闷哦,怎么不是UTF-8呢
输出结果:
b0a10
郁闷哦,怎么不是UTF-8呢
#11
这样呢
iconv -fgbk -tutf-8 encode.c > encode_utf8.c
gcc encode_utf8.c -o encode_utf8
iconv -fgbk -tutf-8 encode.c > encode_utf8.c
gcc encode_utf8.c -o encode_utf8
#12
学习了
#13
不是GBK转到UTF-8哦
是求一个汉字的GBK编码或者UTF-8
====
这有区别吗?
是求一个汉字的GBK编码或者UTF-8
====
这有区别吗?
#14
先算一个汉字UTF8码占几个字节:
int Count( char *buf)/*计算UTF8汉字占几个字节*/
{
char ptr;
int num = 0;
char temp = 0x80;
ptr = buf[0];
while(temp & ptr)
{
num++;
ptr<<=1;
}
if(num == 0)
num = 1;
return num;
}
算出一个UTF8字后 剩下的就是将buf的num个字节转化成16进制输出来就行了
int Count( char *buf)/*计算UTF8汉字占几个字节*/
{
char ptr;
int num = 0;
char temp = 0x80;
ptr = buf[0];
while(temp & ptr)
{
num++;
ptr<<=1;
}
if(num == 0)
num = 1;
return num;
}
算出一个UTF8字后 剩下的就是将buf的num个字节转化成16进制输出来就行了
#15
啊
GBK→Unicode→UTF8
0xB0A1→0x554A→0xE5958A
GBK→Unicode→UTF8
0xB0A1→0x554A→0xE5958A
#16
后来自己解决了