有关char数组与utf8

sinat_35143022 2016-10-12 10:48:52
是这样的 c++写着玩
向网站发送申请 它返给我网页的代码
我是用char数组接收的 但是 直接在控制台里输出是乱码
可能是传给我的是utf8 但是我对编码方式不是很了解
请问 怎么能以utf8的方式读这个char[]啊
...全文
551 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsfv001 2016-10-15
  • 打赏
  • 举报
回复
你那个是接受报头。 请求报头格式如下。 string httpRequeststr="GET "+link+" HTTP/1.1\r\n" "Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*\r\n" "Accept-Language: zh-CN\r\n" "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Tablet PC 2.0; .NET4.0C; .NET4.0E)\r\n" "UA-CPU: AMD64\r\n" "Accept-Encoding: deflate\r\n" "Connection: Keep-Alive\r\n" "Host: "+web_domain+"\r\n\r\n"; 分离用正则, string body; string pattern("<body[^>]*>((.|\n|\r)*)</body>"); regex bodyr(pattern); const regex_iterator<string::const_iterator> enda; regex_iterator<string::const_iterator> it(htmlbody.begin(), htmlbody.end(), bodyr); body=it->str(); 报头的 请求页面中有link和domain变量。 从一个连接中分析出link和domain的方法如下。 char * smtpIp(const char * url) { HOSTENT * iphost; char ipconfig[20]; char * ip=new char[20]; if((iphost = gethostbyname(url)) != NULL) { if(iphost->h_addr_list[0]) { memcpy(ip, inet_ntoa(*((struct in_addr *)iphost->h_addr_list[0])), 20); } } return ip; } // link:eg.http://xxxxx web_domain;//求ip用 void getLinkEle(const string link,string& web_domain,char *& web_ip) { string add1=link.substr(7);//delete http:// int index_split=add1.find_first_of('/'); if(index_split==-1) { web_domain=add1; } else { web_domain=add1.substr(0,index_split); } web_ip=smtpIp(web_domain.c_str()); } 因为是从代码中抽出来的。你看个大概意思。还是自己动手解决。
sinat_35143022 2016-10-14
  • 打赏
  • 举报
回复
引用 2 楼 lsfv001 的回复:
可能是你的http协议的请求报头问题。 有个Accept-Encoding:之类的。别写 gzip。只留下deflate。 gzip ,应该要继续解码,所以是乱码。 你试下看看是不是。
您好 您说的是 类似这样的吗

HTTP/1.1 200 OK

Expires: Fri, 09 Oct 2026 15:18:57 GMT

Date: Tue, 11 Oct 2016 15:18:57 GMT

Server: nginx

Content-Type: text/css

Content-Length: 3295

Last-Modified: Wed, 17 Aug 2016 23:15:49 GMT

Cache-Control: max-age=315360000

X-QSTATIC-HIT: 1
我想 将 报头去掉 只将网页的代码存到文件里 但是不太了解 这个报头 怎么和 代码分开 您可以给些建议吗 万分感谢
HymanLiuTS 2016-10-13
  • 打赏
  • 举报
回复
使用MultiByteToWideChar可以把utf-8字节流转换成unicode,这样就能在控制T显示了
lsfv001 2016-10-13
  • 打赏
  • 举报
回复
可能是你的http协议的请求报头问题。 有个Accept-Encoding:之类的。别写 gzip。只留下deflate。 gzip ,应该要继续解码,所以是乱码。 你试下看看是不是。
赵4老师 2016-10-13
  • 打赏
  • 举报
回复
仅供参考:
// UTF-8 编码字符理论上可以最多到 6个字节长,但目前全世界的所
// 有文字和符号种类加起来也只要编到 4个字节长就够了。
//   UTF-8 是以 8位(即 1个字节)为单元对原始码进行编码(注意一
// 点:这里所讲的原始码都是指Unicode码),并规定:多字节码(2个字
// 节以上才称为多字节)以转换后第1个字节起头的连续“1”的数目(这
// 些连续“1”称为标记位),表示转换成几个字节:“110”连续两个
// “1”,表示转换结果为2个字节,“1110”表示3个字节,而“11110”
// 则表示4个字节……跟随在标记位之后的“0”,其作用是分隔标记位和
// 字符码位。第2~第4个字节的起头两个位固定设置为“10”,也作为标
// 记,剩下的6个位才做为字符码位使用。
//   这样,2字节UTF-8码剩下11个字符码位,可用以转换0080~07FF的
// 原始字符码,3字节剩下16个字符码位,可用以转换0800~FFFF的原始字
// 符码,由此类推。编码方式的模板如下:
//
// 原始码(16进制) UTF-8编码(二进制)
// --------------------------------------------
// 0000 - 007F       0xxxxxxx
// 0080 - 07FF       110xxxxx 10xxxxxx
// 0800 - FFFF       1110xxxx 10xxxxxx 10xxxxxx
// ……
// --------------------------------------------
//
//   模板中的“x”表示字符码。
//   Ascii码<007F,编为1个
// 字节的UTF-8码。汉字的 Unicode编码范围为0800-FFFF,所以被编为
// 3个字节的UTF-8码。
//   例如“汉”字的Unicode编码是6C49,6C49在0800-FFFF之间,所以
// 要用3个字节的模板:1110wwww 10xxxxyy 10yyzzzz。

//    6    C    4    9
// 0110 1100 0100 1001
// wwww xxxx yyyy zzzz
//     wwww   xxxxyy   yyzzzz
// 1110wwww 10xxxxyy 10yyzzzz。
// 11100110 10110001 10001001
//    E   6    B   1    8   9
//“汉”字的UTF-8编码是E6 B1 89
ipqtjmqj 2016-10-13
  • 打赏
  • 举报
回复
引用 4 楼 ipqtjmqj 的回复:
改到UTF-8的代码页 system("chcp 65001");
还要改字体为“Lucida Console
ipqtjmqj 2016-10-13
  • 打赏
  • 举报
回复
改到UTF-8的代码页 system("chcp 65001");
fefe82 2016-10-12
  • 打赏
  • 举报
回复
我觉的问题应该是:怎么能让控制台显示 utf8 的串。 如果是 Windows ,还是先转成 GBK 在显示吧。搜索 MultiByteToWideChar, WideCharToMultiByte

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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