Nhsoft的专栏

3D图形,游戏.多媒体

潘李亮ID:Nhsoft
295520次访问,排名166好友11人,关注者36
从事多媒体软件开发,曾经从事3D图形(游戏)引擎开发.负责开发过的休闲游戏流产:(
Nhsoft的文章
原创 162 篇
翻译 0 篇
转载 23 篇
评论 296 篇
心蓝-xheartblue的公告
最近改行学数学......难啊。 欢迎讨论/指教分析学。
最近评论
边城刑警:楼主的见解很精辟,严重支持
xoyojank:咋不吵了?
hdnero:wow power leveling
Nhsoft:兄台是哪位?嘿嘿。没认出来
zc1:真的是野猪的blog吗?
以前在这里看文的时候就觉得头像很眼熟。。

好久不见啊,没事来gameRes玩玩啊,只是看某人很好玩而已。。

PS照片拍得不错啊,有单反真是有钱人啊~~羡慕
文章分类
收藏
    相册
    北京植物园
    公司门口的风景
    天安门
    我的家乡
    我自己
    游戏发开
    任晓宇的游戏编程实践
    小兰的BLOG。老宋的好朋友,我的师傅之一
    小老鼠的日记
    我的Flickr相册
    我的主页(RSS)
    我的另外一个blog.非技术类
    我的网络相册
    打造一个Coollen!(RSS)
    狗窝。此人严重愤青,当心被咬
    老大的blog. 此君很懒的...
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 疯狂的wchar_t收藏

    新一篇: 说说Intel的驱动 | 旧一篇:  TX早晚会有报应

    疯狂的wchar_t
    PS: 我还是改个标题,不改怕被高手们骂死。

        去年的这个时候当我决定把所有渲染和支持代码都向d3d10转移的时候,就准备搞定以后多语言的问题,于是义无反顾的选择了unicode。unicode处理中文字符串时候方便多了----至少在windows下是如此。
        基于这个出发点,我的xml解析器直接处理的就是unicode,而不是常见的utf-8。一切都很美好,知道我离开windows。上个礼拜,我需要把程序移植到linux下。在编译完程序后,xml加载器首先就罢工了。gdb跟踪进去发现,竟然我取到的一个字符是负数,当时差点没晕倒。想了好长时间没想明白。楞了一个下午才反应过来sizeof(wchar_t) != 2 .....。除了xml文件,我的文件打包器的name成员是wchar_t。意味着我在windows下打包的文件时候在linux下一定会出问题。
        考察了很久,猛然发现gcc有个option叫-fshort_wchar。 激动之,赶快加一个,make clean && make。---结果还是挂! 又让我郁闷了好久,继续gdb。发现wcslen(str)竟然短一半----原来glibc里的wchar_t还是4个字节。看来要使用-fshort_wchar还必须要编译glibc。
        没办法,只能判断wchar_t长短来处理了。目前我的做法是准备做一个template,根据sizeof(wchar_t)来选择使用哪个字符串,保存在文件里的字串通通按照ucs-2来处理。并在加载时候来进行ucs-2/ucs-4转换。不敢轻易下决策了。等想一阵再说。看来unicode也不省心啊,家家都有本难念的经。 

        注:ucs分ucs2和ucs4,就是16bit和32bit的。utf8和utf16/utf32则是编码方式。utf8的anscii码基本和ansi一样。可以使用libiconv来进行各种编码方式之间转化。 编译器里的unicode通常是ucs-2-internal和ucs-4-internal。

    发表于 @ 2008年04月10日 23:30:00|评论(loading...)|编辑

    新一篇: 说说Intel的驱动 | 旧一篇:  TX早晚会有报应

    评论

    #cdgray 发表于2008-04-11 10:42:06  IP: 218.242.216.*
    还是自定义数据类型比较好,处理方式就统一了
    #liigo 发表于2008-04-11 11:24:45  IP: 60.20.2.*
    根本无关UNICODE的事,是C++编译器的实现问题(C++并未规定wchar_t的宽度(sizeof),为什么要惊讶于 sizeof(wchat_t) != 2 ?),是对LINUX下编程不熟悉的问题。所以不能说“看来unicode也不省心啊”,只能说“使用C++进行UNICODE编程不太省心啊”。在我看来,C++对UNICODE提供了一定程度的支持,但很不完善。
    2008-04-12 11:49:53作者回复
    熟悉就省心了? 某非阁下天天研究C++规范?我是在碰到这个问题后才注意这个细节的。我没空天天研究编译器和spec的细节。
    #Jacklondon Chen 发表于2008-04-11 19:07:39  IP: 218.80.200.*
    只能说 C/C++ 对于 Unicode 支持不好。竟然使用宏来区分 unicode/ANSI。相比较而言,VB/MFC/Java/.Net 对 Unicode 只吃要好很多。
    #No Name 发表于2008-04-12 04:53:56  IP: 64.126.16.*
    UTF-8 不是 Unicode? 建议你搞清楚到底什么是Unicode,什么是 UTF-8。
    2008-04-12 11:52:25作者回复
    麻烦您给我解释一下。
    #allenofchina 发表于2008-04-12 22:18:54  IP: 221.137.159.*
    可能gnu是用了UTF32
    而你把它当成了UTF16
    我不知道你要干什么不过显然你不应该直接把wchar_t应用在程序里而是用一个typedef之类的。

    UTF-8当然也是unicode。

    一个Java/Perl程序员飘过~~




    顺带感叹下gnu真的素很热情~
    2008-04-13 21:20:42作者回复
    额,是这样的,unicode以前用的少。<br />问题主要出在,我的数据是保存成ucs2编码方式的,文本可以读上来后转化,但是结构体里的数据就很让人讨厌。不省心啊。
    #小白 发表于2008-04-13 11:08:21  IP: 125.34.139.*
    哎,建议多学学基础啊,整天捣鼓些什么啊.前几年看你做的还挺认真,这几年这么浮躁.
    2008-04-13 21:32:46作者回复
    呵呵。不光浮躁了。还懒了。
    #zz 发表于2008-04-13 15:52:54  IP: 220.160.151.*
    我只纯粹建议一个XML解析类库,当然,可能你早就了解了,所以如果你听过就当我没说,不管如何,不要像批别人那样批我,有些回复好让人寒心……(小心说一句,还真是别人说的对,你差太多,比如,UTF-8和UNICODE你居然让人家“麻烦……”.....真汗.)

    建议用xerces-c,不过还归apache管的那个,仅支持utf-8编码的XML,如果你坚持用unicode。也可以,还有IBM那个分支。
    2008-04-13 21:21:18作者回复
    xerces-c和tinyxml对嵌入式系统来说,都有点大。用不到那么多功能。没办法的事情。其实对我来说utf8的确够了,<br />PS: 我似乎好像没说过utf8不是unicode。开始地方是写错了,不过后面我也说清楚了,ucs2/ucs4/utf8/utf16的关系,有人提出我的utf8/unicode理解有问题,我当然要麻烦人家,zz同志没啥好汗的:)<br />
    #jyybasic 发表于2008-04-13 17:39:38  IP: 218.81.131.*
    lz,UTF-8本身就是unicode规范的具体编码格式之一。
    你出现的问题跟unicode关系不大。
    搞不懂这篇文章怎么会出现在csdn首页。。。
    2008-04-13 21:25:07作者回复
    如liigo所讲,我的问题的确跟unicode关系不大,只能说C++的实现太混乱,一个字符串碍不到编码啥事。<br />UTF-8本身就是unicode编码方式,似乎我也说了,不知道为什么有人要拍我。<br />另外我的blog只是我的日记而已啦。我不知道为什么会出现在csdn的首页,我写这个的目的,一是为了让自己长教训,二是是为了让有些不知道的人了解wchar_t在不同的编译器上实现的不同。我周围比我水平高的人多的是,不知道wchar_t的长度在c++ Spec里没规定的也多的事。
    #mephisto 发表于2008-04-13 20:21:44  IP: 117.22.217.*
    自己不知道还这么不谦虚。
    #所以说要多用typedef 发表于2008-04-14 09:38:04  IP: 210.13.90.*
    我现在写程序尽量都用“大写”的类型。
    #lanzhengpeng2 发表于2008-04-14 10:10:14  IP: 124.193.131.*
    汗!我从来不在Linux下写东西(hello world除外),也不知道还有这个破屄事。
    看来,做了十年程序,仍然是小白啊!
    白活了,今晚就回家写遗嘱去!
    #Nhsoft 发表于2008-04-14 10:24:44  IP: 61.148.16.*
    屄事还很多呢。李志勇同志写了一个singleton。这个singleton对象的构造函数里调用又调用了getsingleton。VC里竟然没事。。。
    楼上的楼上,这个其实跟typedef是无关的,主要是加载数据文件的时候出问题,不同的平台结构体定义不一样。而且还有另外一个问题就是L"XXXX"这样的东西类型,我们没办法typedef掉它。我主要是被这个给抓狂了。
    #xfhsm 发表于2008-04-14 12:47:17  IP: 122.89.82.*
    lanzhengpeng2 发表于2008-04-14 10:10:14 IP: 124.193.131.*
    汗!我从来不在Linux下写东西(hello world除外),也不知道还有这个破屄事。
    看来,做了十年程序,仍然是小白啊!
    白活了,今晚就回家写遗嘱去!


    xiao lan~~~ ^_^

    好久不见啊!没想到这儿遇见你! 哈哈。

    看来我们这类程序员果然都不用linux啊~ 哈哈。

    #xiaoju 发表于2008-04-14 13:10:44  IP: 210.250.42.*
    Unicode本身就是问题之源,我觉得发明双字节表示字符串的人是典型的微软书呆子式思维方式。实际上应该用UTF-8,坚持单字节,所有的字符串处理函数不需要重写,能支持GB2321就能支持所有的国家文字。

    双字节唯一优点就是对于中日韩语言来说稍微节省空间,但进入90年代以来在文字方面节省空间是根本没有意义的。
    #Nhsoft 发表于2008-04-14 13:17:06  IP: 61.148.16.*
    还有for each char的时候简单
    #johnson3d 发表于2008-04-19 22:02:42  IP: 221.216.29.*
    呵呵,和小兰一样,我也从不在linux上搞东西,这东西我的确是听你说才知道的 - -!
    我小白了。
    #johnson3d 发表于2008-04-19 22:04:27  IP: 221.216.29.*
    不过我更多用WCHAR,而不是wchar_t,这样就好多了
    #johnson3d 发表于2008-04-19 22:11:39  IP: 221.216.29.*
    肖锋居然也出现了:)现在怎么样?还在做你的asm crack么?
    #xfhsm 发表于2008-04-22 16:23:33  IP: 122.89.82.*
    灭活活~~~ 是呀是呀,难得在这儿都能见面~ ^_^

    我还是干我老本行…… -___-b


    #johnson3d 发表于2008-04-23 12:35:50  IP: 210.82.38.*
    哈哈,干什么都一样,做了基本就不容易换了,越做越好就好--!
    #kypck_ 发表于2008-05-16 22:59:58  IP: 124.200.151.*
    潘胖子也有被鄙视的时候啊。
    #wurh80 发表于2008-06-11 00:08:04  IP: 119.122.38.*
    只在windows平台下编程的人飘过,unicode化的事烦心还多着呢...特别是用上了VS的STL库之后,那种郁闷啊!!直接的文件流输出硬是连个影都打不出来,最后还得回归到用asni的API,强行改文件头...实在太不方便了...
    #noslopforever 发表于2008-06-15 17:00:00  IP: 124.126.5.*
    帮野猪顶一下。
    跨平台字符编码还是用UTF8或者UTF16好些……UCS2和UCS4只能是内部代码使用,前段日子我也被这个郁闷了…… ^^b
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 心蓝-xheartblue