关于Keil汉字乱码,0xFD问题解决方法

keil编译器会忽略0xFD值的字符串,而这些显示不出来的汉字的内码的后一半正好通通都是0XFD……

下面是Keil官方的说明:
http://www.keil.com/support/docs/2618.htm

GENERAL: COMPILER IGNORES 0XFD, 0XFE, 0XFF VALUES INSTRINGS


Information in thisarticle applies to:

  • C166 Compiler All Versions
  • Cx51 Compiler All Versions
  • C251 Compiler All Versions

QUESTION

I have a problem withthe interpretation of Russian strings in the Keil C51 compiler.Some Russian characters are using the encoding 0xFD. It looks likethis encoding is ignored by the compiler and is not included in theprogram code.

Example:

code char RussianString[] = "??? ????";

Why does this problemexist and how can I avoid this behavior?

ANSWER

The characterencodings 0xFD, 0xFE, and 0xFF are used internally by the Ccompiler. The ANSI standard only requires support for ASCIIcharacters in the range 0x00 - 0x7F.

You may insert thesecharacters by using HEX encodings in the string as follows:

code char RussianString[] = "My Text" "\xFD";

A simple textreplacement which replaces all 0xFD characters with the string'" "\xFD' should do the job.

总之人家不认为这个是BUG,所以很多年就没改过……


网上有很多关于修正这一BUG的方法,补丁或者动手修改软件本身什么的,具体看这里:
http://blog.sina.com.cn/s/blog_6101ed5f0101g6ee.html 

但是这些修改软件的方法都是存在一定的 风险性的,因为不确定在某些特定条件下是否会引起莫名奇妙的其他问题。


个人认为最好的也是最安全的解决方法就是按照Keil官方的来,实际检验也是可行的,况且涉及该BUG的汉字也并不是太多,常用的也就那几个,所以“加后缀”的方法就很好。

具体方法:遇到无法显示字符时在其后加\xFD
如 :unsignedchar code s[]="数学"; 改为 unsignedchar code s[]="数\xFD学"; 即可正常显示。

下面是从GB2312中挑出来的相关汉字:

褒 饼 昌 除 待 谍 洱俘庚过 

糊 积 箭 烬 君 魁 例笼慢谬 

凝 琵 讫 驱 三 升 数她听妄 

锡 淆 旋 妖 引 育札正铸 

佚 冽 邶 埤 荦 蔟 摭啐帻猃 

恺 泯 潺 妪 纨 琮 椠辇挲臊 

忑 睚 铨 稞 瘕 颀 螨簖酏觚 

鳊鼾 

你可能感兴趣的:(51)