• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            攀升·Uranus


            Something Different,Something New
            數(shù)據(jù)加載中……

            多國語言惹得禍

                    上面下指令說要做多國語言版的程序,這可是個不小的改動呀。于是我就拿當(dāng)前的程序運行,一系列的問題隨之出現(xiàn)了。
                    話分兩頭,先說跑在Windows上的,最基本的就是讀各種語言的文件名,正常英文還是正常的,但遇到俄文,法文,德文時就出現(xiàn)問題,正常的字符都變成了"?",跟蹤內(nèi)存發(fā)現(xiàn)讀入內(nèi)存的字符已經(jīng)變成了3f00,也就是"?"的unicode,可見是讀入目錄到內(nèi)存的函數(shù)出了問題,如下代碼:
               long filehandle;
                //the structure of file
                struct _finddata_t entry;
                //"*" means get all the file and directory
                // Get the first file
                if((filehandle = _findfirst( "*", &entry )) != -1)    //-1 means the directory is null
                {
                    tree* child;
                    do{
                        if(entry.attrib&FILE_ATTRIBUTE_DIRECTORY){
                            if ( strcmp("..", entry.name) != 0 && strcmp(".", entry.name) != 0){
                                //printf("%*s%s\\\n", depth, "", entry.name);
                                if(treenode)
                                {
                                    char name[MAX_LOCALPATH_FOLDERNAME_LENGTH+1];
                                    strncpy(name,entry.name,MAX_LOCALPATH_FOLDERNAME_LENGTH-1);
                                    strcat(name,"\\");
                                    child=new tree(name);
                                    treenode->AddChild(child);
                                }
                                //Recursively processes directories
                                //printdir(entry.name, depth + 4,child);
                            }
                        } else{
                            //printf("%*s%s\n", depth, "", entry.name);
                            if(treenode)
                            {
                                child=new tree(entry.name);
                                treenode->AddChild(child);
                            }
                        }
                    }while( (_findnext(filehandle,&entry)) ==0 );
                }

                chdir("..");
                _findclose(filehandle);
                    通過查證MSDN得知類似于_findfirst,findnext都是針對ASCII碼的,要讀unicode(windows默認(rèn)字符集),就得用_wfindfirst,_wfindnext等讀寬字符的操作函數(shù),最終解決問題,但我沒有松氣,因為程序主要是運行在linux中的,Linux真不知道怎么整了。
                    Linux上讀多國語言的文件和目錄就需要對Linux系統(tǒng)深入了解,因為我要讀的文件是usb上的文件,所以得先掛載到一個目錄,
                    mount -t vfat /dev/sda1 /mnt/usb,然后readdir讀入文件,與Windows上同樣的錯,讀入的是"?",我想和windows一樣去找一個類似wreaddir,但是沒有。于是應(yīng)該從掛載著手,目前在NTFS和FAT32/VFAT下的文件系統(tǒng)上都使用了Unicode,這就需要系統(tǒng)在讀取這些文件名時動態(tài)將其轉(zhuǎn)換為相應(yīng)的語言編碼,也就是說掛載的時候要把usb上的編碼轉(zhuǎn)化成16位的Unicode編碼,改命令如下后成功。
                    mount -o iocharset = utf8 /dev/sda1 /mnt/usb.
                    Linux對iocharset的解釋如下:
                    Character set to use for converting between 8 bit characters and 16 bit unicode charaters.The default is iso8859-1. Long filenames are stored on disk in Unicode format.
                    至此終于解決了多國語言的問題,接著我無法想象還有什么問題會出來,但我準(zhǔn)備好了。

            posted on 2007-11-09 18:53 攀升 閱讀(1709) 評論(5)  編輯 收藏 引用 所屬分類: Linux

            評論

            # re: 多國語言惹得禍  回復(fù)  更多評論   

            不錯不錯,大問題解決了,現(xiàn)在出問題可能會在由于是UNICODE,字串處理函數(shù)全部換掉,字符串變長,用于保存字串的數(shù)組要仔細(xì)檢查,小心溢出
            2007-11-09 20:51 | netdigger

            # re: 多國語言惹得禍[未登錄]  回復(fù)  更多評論   

            Did you try boost.filesystem? It providesa convenient directory iterator(as easy as like walk() in python) and supports wide characters well
            2007-11-09 21:00 | tom

            # re: 多國語言惹得禍  回復(fù)  更多評論   

            先把代碼風(fēng)格解決了吧
            2007-11-10 20:13 | 123

            # re: 多國語言惹得禍  回復(fù)  更多評論   

            這個可是個不曉得工程吧。

            # re: 多國語言惹得禍  回復(fù)  更多評論   

            @netdigger
            你說的很有道理
            2007-11-13 11:15 | 攀升
            伊人色综合久久天天人手人婷| 精品人妻伦九区久久AAA片69| 欧洲成人午夜精品无码区久久| 99精品国产免费久久久久久下载| 亚洲人成无码网站久久99热国产| 中文成人无码精品久久久不卡| AV无码久久久久不卡蜜桃| 午夜久久久久久禁播电影| 国产99久久精品一区二区| 国内精品久久久久久不卡影院| 国产亚洲精品久久久久秋霞| 无码专区久久综合久中文字幕| 97r久久精品国产99国产精| 久久本道综合久久伊人| 一本色道久久综合狠狠躁| 免费精品99久久国产综合精品| 日韩十八禁一区二区久久| 国产成人久久AV免费| 欧美与黑人午夜性猛交久久久 | 久久亚洲2019中文字幕| 伊人久久大香线蕉亚洲五月天| 久久99热国产这有精品| 亚洲欧美国产日韩综合久久| 久久天天躁狠狠躁夜夜网站| 国产99久久久国产精免费| 亚洲乱码精品久久久久..| 色综合合久久天天给综看| 狠狠色丁香久久婷婷综| 久久精品成人欧美大片| 一级女性全黄久久生活片免费| 久久精品国产一区| 狠狠色婷婷久久一区二区三区| 亚洲人成无码网站久久99热国产| 91精品国产91热久久久久福利| 日日躁夜夜躁狠狠久久AV| 午夜精品久久久久| 日本国产精品久久| 亚洲精品无码久久久| 久久人人爽人人澡人人高潮AV | 97久久精品人妻人人搡人人玩| 亚洲欧美成人综合久久久|