发布网友 发布时间:2022-04-20 09:28
共1个回答
热心网友 时间:2022-07-12 05:56
真的很正常,linux下经常出现乱码问题,这个跟编辑器的编码有关,至于wps,,你进wps的官方论坛,他们说这个问题很多次:一下是官方的说明:看涛哥讲故事讲的起兴,正好周末,我也上来讲讲故事哈。随便挑了个主题,就讲“无尽混乱的编码吧”。我想只要是玩linux的人,多多少少都遇到过乱码的问题吧,否则还真不能叫linux党。wps运行时用的是什么编码?wps运行时采用的是utf16编码,我相信在windows这是很多程序的选择。但是坑爹的gcc竟然,它竟然只支持utf32编码?????gcc的wchar_t竟然是4字节的,4字节的!!!!幸亏那个坑爹的c++0x新标准被我们赶上了,支持了所谓u"str"和U"str"新格式。u就是utf16,U就是utf32。so,我们只能选用了gcc4.5作为我们的编译器,并且编写了一个宏__X(str),在windows为L #str,linux下为u #str。 (这也是很多朋友抱怨libstdc++版本过高的罪恶根源)然后我们把工程里所有的L"xxx"改为了__X("xxx"),把工程里的所有wchar_t改为WCHAR// 囧,改的我们手脚发麻啊。但是好景不长,没过两天就让我们知道,c++标准委员会绝对不是吃素的。这帮天煞的家伙不把c++搞的*就不爽。strcmp是单字节的,wcscmp是4字节的,那两字节的是啥?????没有!上帝啊: c++0x是的,c++0x不是c0x。。。。。so,char16_t是没有c库支持的。这叫神马utf16支持啊。一不做二不休,我们再把所有的字符串c标函数又实现了一遍,于是乎有了xstrcmp,xstricmp,xstrncmp....。然后继续改到手发麻。。。。但是c艹还是觉得我们太悠闲了,so,下一句台词是: c++0x不是c0x,也不是c++。。。。是的,我们目前发现char16_t除了std::basic_string<char16_t>能链接通过以外没有发现系统库例子。连正则表达式都不能用,// 朋友你想用?不好意思,我们还没实现,你再等等吧。。。。。。。。。我感觉我们只剩下半管血了。c++标准委员会还是觉得意犹未尽啊。在不和c兼容 & 半成品实现上, c++0x下一个坑我们的是char16_t,这个类型本身。对,他是一个类型,不是typedef unsigned short chart16_t。so,工程里充斥满了QString::fromUtf16((WCHAR *)__X("what a bad day!!!"));到最后我们终于受不了了,把__X的定义改成了 ((unsigned short *)(u #str))。then....__X('x') 和 __X("adsf") __X("asdf") 和 WCHAR str[] = __X("asdf") 都顺利歇菜了。阿门然后我们血条红了。。。wps的源代码用的是什么编码?这个不用想都知道,wps是从vc6年代过来的工程,vc6又不支持utf8,当然是ansi编码(GBK)的了。移植到linux的时候,没多久我们就碰到了编码问题。主要是2种情况。1 gcc按照utf-8编码解释gbk文件,导致\n回车被吞。这个时候一旦使用\\形式的备注,编译就悲剧了。(/**/形式只要在*/前加入足量的空格就没问题)2 字符串中本身存在非ascii字符。这种情况虽然不多,却是更加棘手。于是在linux分支上,我们就将一部分文件转为了utf8。但这是做了几天后我们就发现不对劲了。去vc上做了个实验,果然vc罢工了。最后我们根据实验结果得出以下结论: vc支持ansi、utf8+bom、utf16+bom,gcc支持utf8、utf8+bom于是我们经过商议后,得出结论: 把所有工作代码转为utf8+bom,以适应将来跨平台步骤如下:1 编写svn钩子,以进行强制编码检查2 将主干转为utf8+bom3 改写svn客户端,使得支持跨编码代码合并4 所有的分支和主干合并后,重新拉取分支后变为utf8分支。于是乎我很happy的将主干转为了utf8+bom,结果,结果编不过去了。~_~然后才发现,天煞的windows资源编译器只支持ansi、utf16+bom我勒个去啊,一交集,发现没答案了。幸亏那部分文件,没包含非中文不行的字符,俺直接给那部分文件中文备注全给删除了,改成了英文备注,OK,过了看了这个计划,大家就知道最头大的在3和4两个步骤。其他分支还好,文件编码基本都是ansi的,合并的时候基本没压力。linux分支的文件有很多都是utf8没bom的。然后俺又做了搓事啊,悲剧svn客户端没改好,编码猜测部分代码除了BUG。然后。。。。。然后俺就拉着一帮小弟,人肉fixup啊。。。。。。。。。。追问嘿嘿 太专业了 看不懂 我的电脑的乱码是出现在 钟表哪里还有就是出现在开始菜单的边框哪里 电源哪里的关机的字全是乱码 不过电脑重启一次就好了 到晚上就又这样了 这是为什么呀