• <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>
            隨筆 - 96  文章 - 255  trackbacks - 0
            <2008年3月>
            2425262728291
            2345678
            9101112131415
            16171819202122
            23242526272829
            303112345

            E-mail:zbln426@163.com QQ:85132383 長期尋找對戰(zhàn)略游戲感興趣的合作伙伴。

            常用鏈接

            留言簿(21)

            隨筆分類

            隨筆檔案

            SDL相關(guān)網(wǎng)站

            我的個(gè)人網(wǎng)頁

            我的小游戲

            資源下載

            搜索

            •  

            積分與排名

            • 積分 - 494273
            • 排名 - 39

            最新評論

            閱讀排行榜

            評論排行榜

            作者:龍飛

            3.1:GNU的libiconv項(xiàng)目
            http://www.gnu.org/software/libiconv/
                    再一次的,感謝偉大的GNU。我們需要的是Unicode碼,在程序中轉(zhuǎn)換,我們需要相應(yīng)的庫。libiconv支持許多字符集,包括我們將用到的GB2312,UTF-8和UCS-2(Unicode)。具體的,在項(xiàng)目主頁上有詳細(xì)的說明。我們需要新學(xué)習(xí)直接用的類容并不繁多,同樣的,如果你沒什么興趣自己編譯源代碼,可以直接用在win32下編譯好的頭文件,庫和動態(tài)鏈接庫(DLL)。win32下的項(xiàng)目主頁是:
            http://gettext.sourceforge.net/
            有趣的是,作者把它作為了我們前面提到的gettext的一部分。在下載頁面上,我們直接選擇libiconv-win32,同樣的,我直接給出所需要的三部分文件的相關(guān)信息:
            iconv.h:頭文件,請?jiān)贑++代碼中#include進(jìn)來;
            iconv.lib:庫文件,在編譯時(shí)候使用;
            iconv.dll:動態(tài)鏈接庫,請放到exe文件能找到的路徑下(通常與exe在同一文件夾下面)
                    下面,我們看看libiconv的使用方法。

            3.2:libiconv的演示程序
            我們還是邊寫程序邊做說明:
            #include <iostream>
            #include 
            <string>
            #include 
            <iomanip>
            #include 
            "GNU/iconv.h"

            void showHex(int x);
            <iomanip>和showHex函數(shù),是用來現(xiàn)實(shí)16進(jìn)制的。我們在前面用過。
            int main(int argc, char* argv[])
            {
                
            //src string
                const std::string str = "你好";
                
            //string size
                const int STR_SIZE = 256;
                
            //string to be changed
                const unsigned char* src = (const unsigned char*)(str.c_str());
                size_t src_len 
            = strlen((char*)src);
                
            //string after changed
                unsigned char dst[STR_SIZE] = {0};
                size_t dst_len 
            = sizeof(dst);
                
            //iconv's arg
                const unsigned char* in = src;
                unsigned 
            char* out = dst;
                std::cout 
            << "src: " << src << std::endl;
            我們用來轉(zhuǎn)換的字符串是“純中文”(為什么我要加引號重點(diǎn)說明,后面會有原因的解釋)"你好"。STR_SIZE是預(yù)留的轉(zhuǎn)換內(nèi)存空間。為什么不用動態(tài)存儲呢?因?yàn)槲以囘^,有錯(cuò)誤,可能是iconv自身的限制。src是C風(fēng)格的源字符串,dst是轉(zhuǎn)換后的unsigned char數(shù)組。in和out是用于inconv的參數(shù)。
                //GB2312 to UCS-2 (Unicode)
                iconv_t cd;
                cd 
            = iconv_open("UCS-2""GB2312");
                
            if ((iconv_t)-1 == cd){
                    
            return -1;
                }
                iconv(cd, (
            const char**)&in&src_len, (char**)&out&dst_len);
                iconv_close(cd); 
            這一段是編碼的轉(zhuǎn)換,詳細(xì)內(nèi)容請查閱iconv的doc。
                //Unicode dst
                std::cout << "dst: ";
                
            int unicode_len = strlen((char*)dst);
                
            for (int i = 0; i < unicode_len; i++) {
                    showHex(dst[i]);
                }
                std::cout 
            << std::endl;

                
            return 0;
            }

            void showHex(int x)
            {
                
            using namespace std;
                cout 
            << hex;
                cout 
            << "0x" << setw(4<< setfill('0'<< x << " ";
                cout 
            << dec;
            }
            最后一部分是顯示轉(zhuǎn)換后代碼。包括函數(shù)showHex()。

            3.3:iconv的問題。

                    我們似乎已經(jīng)解決問題了。但是有一個(gè)問題是,這樣轉(zhuǎn)換的編碼是8位的,即unsigned char,而SDL需要的是16位的,即Uint16;第二個(gè)問題是,我說了,這是純中文,你試試在“你”和“好”之間加段英語是什么效果?結(jié)論是,轉(zhuǎn)換不能正常進(jìn)行,在遇到第一個(gè)非漢字的時(shí)候,就終止了。
                    問題還是沒解決,研究還得繼續(xù)。
            posted on 2008-03-30 12:45 lf426 閱讀(3152) 評論(0)  編輯 收藏 引用 所屬分類: SDL入門教程跨平臺與GNU
            国产精品一区二区久久精品无码| A级毛片无码久久精品免费| 伊人久久大香线蕉av不卡| 久久夜色精品国产噜噜麻豆| 久久国产精品99精品国产987| 久久精品无码一区二区日韩AV| 亚洲愉拍99热成人精品热久久 | 狠狠人妻久久久久久综合| 香蕉久久影院| 精品国产福利久久久| 久久精品国产免费观看三人同眠| 99久久中文字幕| 久久永久免费人妻精品下载| 久久人人爽人人爽AV片| 国产午夜久久影院| 日韩人妻无码一区二区三区久久| 欧美精品丝袜久久久中文字幕| .精品久久久麻豆国产精品| 亚洲精品白浆高清久久久久久| 久久久中文字幕日本| 中文字幕亚洲综合久久2| 99久久无色码中文字幕| 亚洲va久久久噜噜噜久久| 久久乐国产综合亚洲精品| 色播久久人人爽人人爽人人片aV| 91精品久久久久久无码| 国产精品久久久久久影院| 91精品国产高清久久久久久io| 久久狠狠高潮亚洲精品| 亚洲va国产va天堂va久久| 久久久久亚洲AV无码专区体验| 久久香蕉超碰97国产精品| 久久亚洲精品无码AV红樱桃| 久久久久久精品久久久久| 久久精品国产久精国产一老狼| 精品久久久无码21p发布| 性欧美丰满熟妇XXXX性久久久 | 久久精品国产69国产精品亚洲 | 一本一本久久a久久精品综合麻豆| 久久精品国产亚洲Aⅴ香蕉 | 7777精品久久久大香线蕉|