< 返回

问题1:Keil5工程里的程序文件,英文正常但是汉字乱码

最后更新时间:2024.6.8

问题原因

UTF-8与GB2312编码不兼容。

目前汉字的编码主要有以GB开头的国标码(GB2312/GBK/GB18030)和万国码传输格式(UTF-8)两种,两种编码均存在且互不兼容。

Keil5软件默认一般是GB2312,UP主视频的工程一般默认UTF-8,网上其他人的代码,编码格式也不确定,当这些工程互相添加文件后,就容易导致中文乱码。

解决方法

统一整个工程所有文件的编码格式,并在Keil5软件的配置中选择正确的编码设置。

请根据以下情况选择对应的解决办法。

1. 若乱码现象如下图所示,英文正常,但是中文出现了很多绿色方块状的乱码。则此状况的原因是文件的编码格式是GB2312,而软件配置的编码格式却是UTF-8。软件使用UTF-8的编码解析GB2312的编码,自然会出现汉字乱码。

img

英文正常,但是中文出现了绿色方块状的乱码

解决办法是:点击扳手图标,打开Keil5的配置界面,Encoding下拉框选择“Encode in ANSI”或者“Chinese GB2312(Simplified)”,以GB2312的编码格式来解析文件。

下图为选择“Chinese GB2312(Simplified)”的现象,中文正常,但是选择GB2312后,字体就自动变成非等宽字体了。

img

工程配置中选择Encoding为GB2312

下图为选择“Encode in ANSI”的现象,中文正常,但是选择ANSI后,用光标选择汉字或者删除汉字时,会出现半字的Bug。

img

工程配置中选择Encoding为ANSI

另外注意,修改软件配置中的Encoding下拉框,只是改变软件解析的格式,并不会改变程序文件原来的编码格式,例如下图中,虽然配置中选择的是GB2312,但实际上程序文件的编码格式仍然是UTF-8。

img

修改Encoding下拉框并不会改变程序文件原来的编码格式

如果不确定文件的编码,可以在这个下拉框中的“Encode in ANSI”、“Chinese GB2312(Simplified)”和“Encode in UTF-8 without signature”三者之间自行切换,看看哪一个选项合适。

2. 若将UP主提供的程序文件加入到网上别人的工程,或者在UP主提供的工程中加入网上别人的程序文件,则此操作很可能会导致各个文件编码格式不统一的问题。这样无论怎么修改工程的配置,都容易出现中文乱码,尤其是将汉字写入程序内部的情况。

为了避免文件编码格式不统一或者不清楚文件的编码格式是哪种的问题,我们可以用软件统一将工程的文件修改编码格式。

UltraCodingSwitch这款软件可以完成编码格式修改的任务,点击如下链接,获取软件:

https://pan.baidu.com/s/156hTUAkJz2T2CyfjZdgk6w?pwd=dhjt,提取码:dhjt,链接内压缩包解压密码:ultra。

软件使用方法如下:

打开软件,点击“+文件夹”,选中并添加想要转换编码格式的工程文件夹。

img

添加工程文件夹

添加工程文件夹后,点击“编码方式”按钮,并选择想要转换的目标编码格式。

例如此示例中,我想要工程编码格式全部转换为UTF-8,则勾选“UTF8”选项的勾。如果想转换为GB2312,则勾选“GBK/GB2312”的勾即可。

img

选择目标编码格式

最后点击“开始”按钮,开始转换。转换完成后,下面会提示结果。

img

转换完成

若在转换时,出现了“Cannot create file ...”的报错,这个一般是因为工程中有只读文件,需要在工程文件夹右键,属性,取消只读的选项。取消只读后,再进行上述转换即可。

img

取消文件的只读属性

文件夹所有文件的编码格式转换之后,再在Keil软件的配置里选择对应的Encoding,即可实现每个文件的编码和解析一致。

另外,此软件还可以使用“+文件”的功能,只转换部分关键文件,这样可以不对工程所有的文件进行编码格式变更。转换时,也可配置过滤器等功能。大家可以自行研究。

img

编码转换软件的更多功能


< 返回