网页
资讯
视频
图片
知道
文库
贴吧
地图
采购
进入贴吧
全吧搜索
吧内搜索
搜贴
搜人
进吧
搜标签
日
一
二
三
四
五
六
签到排名:今日本吧第
个签到,
本吧因你更精彩,明天继续来努力!
本吧签到人数:0
一键签到
成为超级会员,使用一键签到
一键签到
本月漏签
0
次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行
补签
。
连续签到:
天 累计签到:
天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月25日
漏签
0
天
c语言吧
关注:
790,840
贴子:
4,295,866
看贴
图片
吧主推荐
视频
游戏
11
回复贴,共
1
页
<<返回c语言吧
>0< 加载中...
网络通信的乱码问题
只看楼主
收藏
回复
呆萌小肥猪TD
毛蛋
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
学习socket函数,和手机通信出现了乱码
网上看了一大堆解决乱码的区域设置,不过我按教程翻了半天设置,手机只有中文、电脑只有中国 中文简体,这两个让人费解的编码页,没有出现utf8的国家区域选项
控制台程序设置代码页勉强能看,不过scanf和fgets输入的时候,输入法就无法输入中文了,只能输入英文字符
我想问问看你们遇到过乱码问题吗,是不是现在的电脑或操作系统可以切换utf8代码页就没有乱码的问题了?
设置代码页,输入法就用不了,不设置还可以输入中文
设置输入输出为UTF8,程序就蹦了
GTA小鸡
吧主
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
#include <Windows.h>
#include <stdio.h>
int main()
{
char s[100];
SetConsoleCP(CP_UTF8);
SetConsoleOutputCP(CP_UTF8);
scanf("%s", s);
printf("%s\n", s);
for (int i = 0; s[i]; i++)
printf("%02hhX ", s[i]);
return 0;
}
先用这段代码检测控制台,输入中文能否正常输出。Win11 23H2+ucrt可以,之前的不一定。
呆萌小肥猪TD
毛蛋
1
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
GTA小鸡
吧主
13
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
把所有设置编码的函数去掉,确保控制台代码页是GBK(936)
编写以下函数:
static int mbcs_conv(unsigned cpout, unsigned cpin, char *strout, const char *strin, size_t size)
{
wchar_t *buf = (wchar_t*)malloc(sizeof(wchar_t) * size);
int retval;
if ((retval = MultiByteToWideChar(cpin, 0, strin, -1, buf, size)) == 0)
goto ret;
if ((retval = WideCharToMultiByte(cpout, 0, buf, -1, strout, size, NULL, NULL)) == 0)
goto ret;
ret:
free(buf);
return retval;
}
int utf8_gbk(char *gbkstr, const char *u8str, size_t size)
{
return mbcs_conv(936, CP_UTF8, gbkstr, u8str, size);
}
int gbk_utf8(char *u8str, const char *gbkstr, size_t size)
{
return mbcs_conv(CP_UTF8, 936, u8str, gbkstr, size);
}
发送到网络中的字符串一律使用gbk_utf8转码,从网络中接收的字符串一律使用utf8_gbk转码。
aaaaaaa421
马猴烧酒
14
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
不建议用 C/C++ 标准库,它们对 UTF-8 的支持并不好(不过 Win10/Win11 似乎在系统组件与标准库层面修了些 bug)。建议直接使用 WinAPI 拿到原始的 wchar_t 数据,再手动转换成 UTF-8,这样兼容性最好。
豪杰兴邦
强能力者
7
该楼层疑似违规已被系统折叠
隐藏此楼
查看此楼
收发端自己处理编码,我是直接UTF16完事,当然是因为标准库不好处理UTF8,懒得找UTF8的库了。
登录百度账号
扫二维码下载贴吧客户端
下载贴吧APP
看高清直播、视频!
贴吧页面意见反馈
违规贴吧举报反馈通道
贴吧违规信息处理公示