• <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年4月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

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

            常用鏈接

            留言簿(21)

            隨筆分類

            隨筆檔案

            SDL相關網站

            我的個人網頁

            我的小游戲

            資源下載

            搜索

            •  

            積分與排名

            • 積分 - 492114
            • 排名 - 38

            最新評論

            閱讀排行榜

            評論排行榜

            作者:龍飛

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

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

            void showHex(int x);
            <iomanip>和showHex函數,是用來現實16進制的。我們在前面用過。
            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;
            我們用來轉換的字符串是“純中文”(為什么我要加引號重點說明,后面會有原因的解釋)"你好"。STR_SIZE是預留的轉換內存空間。為什么不用動態存儲呢?因為我試過,有錯誤,可能是iconv自身的限制。src是C風格的源字符串,dst是轉換后的unsigned char數組。in和out是用于inconv的參數。
                //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); 
            這一段是編碼的轉換,詳細內容請查閱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;
            }
            最后一部分是顯示轉換后代碼。包括函數showHex()。

            3.3:iconv的問題。

                    我們似乎已經解決問題了。但是有一個問題是,這樣轉換的編碼是8位的,即unsigned char,而SDL需要的是16位的,即Uint16;第二個問題是,我說了,這是純中文,你試試在“你”和“好”之間加段英語是什么效果?結論是,轉換不能正常進行,在遇到第一個非漢字的時候,就終止了。
                    問題還是沒解決,研究還得繼續。
            posted on 2008-03-30 12:45 lf426 閱讀(3134) 評論(0)  編輯 收藏 引用 所屬分類: SDL入門教程跨平臺與GNU
            亚洲国产视频久久| 国内精品久久久久国产盗摄| 久久久久国产| 精品国产乱码久久久久软件 | 久久亚洲精精品中文字幕| 色婷婷综合久久久久中文| 伊人久久免费视频| 久久亚洲国产精品成人AV秋霞| 青草国产精品久久久久久| 精品人妻伦九区久久AAA片69| 一日本道伊人久久综合影| 青青青青久久精品国产| 久久SE精品一区二区| 国产午夜福利精品久久| 久久夜色精品国产噜噜麻豆| 四虎影视久久久免费观看| 久久A级毛片免费观看| 亚洲国产综合久久天堂| 一本伊大人香蕉久久网手机| 久久亚洲私人国产精品vA| 武侠古典久久婷婷狼人伊人| 国产精品va久久久久久久| 99国产欧美精品久久久蜜芽| 久久亚洲国产最新网站| 久久久亚洲欧洲日产国码aⅴ| 久久婷婷国产剧情内射白浆| 亚洲av日韩精品久久久久久a | 国产毛片欧美毛片久久久| 91久久成人免费| 久久精品国内一区二区三区| 日产精品久久久久久久性色| 一97日本道伊人久久综合影院| 国产真实乱对白精彩久久| 国产91久久综合| 国产A级毛片久久久精品毛片| 国产精品久久久久久| avtt天堂网久久精品| 久久久精品一区二区三区| 久久―日本道色综合久久| 99久久婷婷国产一区二区| 国产精品成人精品久久久|