utf-8解码的问题?在线等!!!

talkingmute 2007-01-23 05:15:19
急求utf-8解码的代码?
将如下一组十六进制数,还原成中文....
e8 bf 99 e6 98 af e6 88 91 e7 9a 84 e6 96 b9 e6 a1 88
...全文
529 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
halve 2007-01-31
  • 打赏
  • 举报
回复
python裏頭很簡單
>>> print unicode('\xe8\xbf\x99\xe6\x98\xaf\xe6\x88\x91\xe7\x9a\x84\xe6\x96\xb9\
xe6\xa1\x88', 'utf-8')
... 这是我的方案
muymuy 2007-01-29
  • 打赏
  • 举报
回复
补充一下:
利用libiconv先将这个utf-8表示的字符串,转换为gbk编码的字符串,然后,打印此字符串就可以显示出汉字。
muymuy 2007-01-29
  • 打赏
  • 举报
回复
这属于字符集编码转换的问题,标准C/C++的函数库里没有这个功能。只能借助第三方库,libiconv是一个很好的选择,linux默认就安装了这个库,开源的,而且跨平台,windows也可以用,需要自己编译一下。

参考:
http://www.gnu.org/software/libiconv/
htqx 2007-01-29
  • 打赏
  • 举报
回复
那要一个编码规律,可能还要一个编码表之类的东西.

只要将uft-8转化为uft-16,就可以用wprintf 这类w开头的字符串函数来处理了.
muymuy 2007-01-29
  • 打赏
  • 举报
回复
补充一句:
大名顶顶的xerces-c(一个处理xml的开发包),为了支持多国语言就是采用wchar_t,wstring,并采用utf-16编码。
iambic 2007-01-29
  • 打赏
  • 举报
回复


typedef wchar_t* String;

String ReadStringAt(FILE* fp, String buffer, size_t buffer_length, size_t utflen)
{
int c, char2, char3;
int count = 0;
unsigned int i;

assert(buffer_length > utflen );
if (buffer_length <= utflen)
{
fprintf(stderr, "too short buffer");
exit(1);
}

for (i = 0; i < utflen; ++i)
{
c = (fgetc(fp)) & 0xFF;
if (c==-1)
{
fprintf(stderr, "EOFException\n");
exit(1);
}
switch (c>>4)
{
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
/* 0xxxxxxx*/
count++;
*buffer++ = c;
break;
case 12: case 13:
/* 110x xxxx 10xx xxxx*/
count += 2;
char2 = fgetc(fp);
if (char2==-1)
{
fprintf(stderr, "EOFException\n");
exit(1);
}
if ((char2 & 0xC0) != 0x80)
{
fprintf(stderr, "malformed input around byte %s\n", count);
exit(1);
}
*buffer++ = ((c&0x1F)<<6) | (char2&0x3F);
break;
case 14:
/* 1110 xxxx 10xx xxxx 10xx xxxx */
count += 3;
char2 = fgetc(fp);
char3 = fgetc(fp);
if ( char2==-1 || char3==-1 )
{
fprintf(stderr, "EOFException\n");
exit(1);
}
if ( (char2 & 0xC0) != 0x80 || (char3 & 0xC0) != 0x80 )
{
fprintf(stderr, "malformed input around byte %s\n", count -1 );
exit(1);
}
*buffer++ = ((c&0x0F)<<12) | ((char2&0x3F)<<6) | (char3&0x3F);
break;
default:
/* 10xx xxxx, 1111 xxxx */
fprintf(stderr, "malformed input around byte %s\n", count);
exit(1);
}
}
*buffer++ = 0;
return buffer;
}
muymuy 2007-01-29
  • 打赏
  • 举报
回复
>>libiconv 可以支持多少个国家的编码?
见:http://www.gnu.org/software/libiconv/
这里有详细介绍。
htqx 2007-01-29
  • 打赏
  • 举报
回复
libiconv 可以支持多少个国家的编码?
yecheng_110 2007-01-27
  • 打赏
  • 举报
回复
这个就是把字符串翻译为二进制的数据
保存
用记事本打开不就行了
talkingmute 2007-01-27
  • 打赏
  • 举报
回复
dddddddddddd
talkingmute 2007-01-24
  • 打赏
  • 举报
回复
dddddddddddddd
talkingmute 2007-01-23
  • 打赏
  • 举报
回复
麻烦大哥给我代码来啊,如何转换呢。谢谢!!
halve 2007-01-23
  • 打赏
  • 举报
回复
"这是我的方案"...
汗一个,刚刚手动翻译的 = =b

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧