鱼C论坛

 找回密码
 立即注册
查看: 1914|回复: 2

[技术交流] 关于mingw-w64报错下的中文处理

[复制链接]
发表于 2022-8-2 23:42:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 TomZz 于 2022-8-3 00:47 编辑

使用mingw-w64作为编译器。
Windows下以以下代码运行:
  1. chcp 65001 > null ; if ($?) { cd "c:\Users\Administrator\Desktop\数据结构\1.基本概念" } ; if ($?) { gcc 例3.c -o 例3 } ; if ($?) { .\例3 }
复制代码

即将控制台改为UTF-8了,正常输出和输入中文。
可是当我故意写一段错误代码
  1.   printf("试试中文") 中;
复制代码

报出了三个错误
  1. ��3.c: In function 'main':
  2. ��3.c:37:26: error: stray '\344' in program
  3.    printf("�01;31m中;
  4.                           ^
  5. ��3.c:37:27: error: stray '\270' in program
  6.    printf("�01;31m��;
  7.                            ^
  8. ��3.c:37:28: error: stray '\255' in program
  9.    printf("�01;31m�;
复制代码

可以看到到报错的情况下中文文件名和中文代码部分仍是乱码。
文件名是"例3.c",估计是“例”这个字占用两字节被强制拆分成两个一字节的字处理。
有大佬可以解读一下Gcc的报错机制是强制ascii码吗?

附上截图
Snipaste_2022-08-02_23-43-44.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-3 13:52:03 | 显示全部楼层
实测中文文件名并不会乱码,但是不建议使用中文文件名,因为 gdb貌似并不支持中文路径。


                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-8-3 14:04:58 | 显示全部楼层
本帖最后由 mblock 于 2022-8-3 14:11 编辑
mblock 发表于 2022-8-3 13:52
实测中文文件名并不会乱码,但是不建议使用中文文件名,因为 gdb貌似并不支持中文路径。


文件名貌似不论如何都是用gbk编码的,但是文件报错的部分,是用的文件编码,如果源码采用gbk,则没有这个问题。

我的建议是不要改chcp,这东西会导致输入输出流采用不同的编码,如果你chcp 65001了,输出虽然是utf-8但是,输入流仍然是gbk。

最简单的解决方法应该就是全用 gbk了(源码也是用gbk编码)

                               
登录/注册后可看大图

没有问题

如果源码执意要用 utf-8 可以在编译选项里加一个 -fexec-charset=GBK 让输出的文件是GBK编码的。
也不会有什么问题,当然就是报错的时候有乱码,但是我平时用vscode写,也不去看他怎么报错的,定位到多少行和错误描述就行。

你可以找找看有没有相关的命令选项可以控制报错时候的编码

https://gcc.gnu.org/onlinedocs/g ... GCC-Command-Options
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 19:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表