当前位置:首页 » 编程语言 » c语言gbk转utf8

c语言gbk转utf8

发布时间: 2023-11-22 00:01:29

❶ C语言控制台程序,中文输出变成乱码,怎么解决

这里涉及到一个字符在源代码(文本)中,编译好的二进制文件中,以及最后控制台输出编码形式的区别.
首先,要明确一点:C(语言/程序)并不理解ANSI,UTF-8以及任何其他编码.它只知道处理你给它的字符的二进制表示.
在简体中文Windows下,默认的文本保存编码是ANSI(即GBK);Linux下根据系统locale设定,一般应该是(zh_CN.UTF-8).(以下基于简体中文Windows)
1)对于源文件中保存的"中文"这个字符串,VS2008看到的就是"0xd6d0"和"0xcec4"的形式(默认ANSI编码得到).但编译器才不管是不是GBK神马的,它就管那串数字.
区别,MinGW看到的是"0xe4b8ad"和"0xe69687"(gcc默认UTF-8).注意,用MinGW编译的源文件中有中文宽字符必须保存为UTF-8编码.
2)然后,在二进制文件中的存储形式,对传统的字符串(char str[] = "中文";),编译器什么都不做,直接把那串数字(如"0xd6d0","0xcec4")搬过去塞进二进制文件.
但对于宽字符串(wchar_t wstr[] = L"中文";),编译器会将其做转换,转换成Unicode编码格式(在Windows是UTF-16,而Linux下是UTF-32).如"中文"的16位Unicode是"0x4e2d"和"0x6587",然后把这串转换后的数字("0x4e2d","0x6587")塞进二进制文件中.(这里VS和MinGW做的没有区别)
这里有点需要注意,编译器必须知道你的源文件保存的编码!如VS默认是ANSI编码,如果你用UTF-8保存.c源文件去用VS打开看一定是乱码.同理如果你用mingw编译ANSI编码保存的源文件,也会出错!(但可以修改编译选项解决,见文章末尾) 在本文这里这个原因其实很好理解,因为编译器需要知道,如果它要将一个保存在文件中的字符转成宽字符时,是从什么编码转到Unicode.(可见上述VS是GBK->Unicode,而MinGW是UTF-8->Unicode)

❷ C语言汉字机内码特点是什么汉字输入输出的原理

1、汉字编码方式很多,有国标码(GB2312_1980),大五码,GBK,简体18030,区位码,电报码,还有它们的变形:unicode 大端小端码,UTF-8,UTF-*,HZ 等等。
内码特点 :二进制双字节,每字节用到8bits.
输入原理,把连续输入的ASCII字符串,通过中文输入软件转化为双字节 中文内码。
输出原理,从 双字节中文内码 查出 字体(font)和 “刻痕",放大/缩小,在频幕或纸上显示打印出来。

2、在C语言中,可以通过将汉字作为字符串输入。
由于一个汉字占2个字节,所以对汉字的操作,只能以2个字节作为操作单位。
下面通过具体实例来说明汉字在C语言中的使用:
char s[] = "首都北京"; // 将汉字字符赋值给字符数组
char s2[20]; // 定义字符数组,存放用户输入的汉字
scanf("%s", s2); // 接收用户输入的汉字字符
printf("%d\n", sizeof(s)); // 计算字符数组s所占的内存单元,输出9(最后一个字节是结束字符'\0')
printf("%s\n", &s[2]); // 输出“都北京”(首字占2个字节)
printf("%s\n", s2); // 输出用户输入的汉字

热点内容
落樱小屋哪里下载安卓 发布:2025-01-27 12:35:13 浏览:71
微信服务器IP跳转 发布:2025-01-27 12:26:54 浏览:73
oracle自动备份脚本linux 发布:2025-01-27 12:21:40 浏览:936
pop服务器密码怎么填 发布:2025-01-27 12:20:02 浏览:968
oraclesqlnumber 发布:2025-01-27 12:04:22 浏览:849
如何看三才配置数理暗示力 发布:2025-01-27 12:04:15 浏览:811
我的世界离线2b2t的服务器 发布:2025-01-27 11:51:25 浏览:144
网站被异常篡改访问有风险 发布:2025-01-27 11:50:01 浏览:431
光遇国际服脚本全部图 发布:2025-01-27 11:47:40 浏览:139
ios资源加密 发布:2025-01-27 11:36:33 浏览:816