• <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年2月>
            272829303112
            3456789
            10111213141516
            17181920212223
            2425262728291
            2345678

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

            常用鏈接

            留言簿(21)

            隨筆分類

            隨筆檔案

            SDL相關網站

            我的個人網頁

            我的小游戲

            資源下載

            搜索

            •  

            積分與排名

            • 積分 - 494275
            • 排名 - 39

            最新評論

            閱讀排行榜

            評論排行榜

            作者:龍飛

            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 閱讀(3152) 評論(0)  編輯 收藏 引用 所屬分類: SDL入門教程跨平臺與GNU
            久久无码人妻一区二区三区午夜| 精品久久久久久久久免费影院| 久久久久久亚洲精品成人 | 国产叼嘿久久精品久久| 欧美精品福利视频一区二区三区久久久精品| 99热成人精品免费久久| 久久精品成人欧美大片| 青青草原精品99久久精品66| 久久久久久久尹人综合网亚洲| 久久99精品久久久久久噜噜| 亚洲中文字幕无码久久精品1| 久久综合综合久久狠狠狠97色88| 色婷婷久久久SWAG精品| 久久综合狠狠色综合伊人| 亚洲国产成人久久综合一区77| 国产精品视频久久久| 一本色综合久久| 激情综合色综合久久综合| 久久丫精品国产亚洲av| 一本久久a久久精品综合香蕉| 91亚洲国产成人久久精品网址| 久久香综合精品久久伊人| 久久久久久毛片免费看 | 久久99国产精品久久99| 无码八A片人妻少妇久久| 国产精品伦理久久久久久| 99久久精品国内| 成人国内精品久久久久一区| 久久久久久久久久久| 伊人久久精品影院| 中文字幕精品久久| 免费一级欧美大片久久网 | 国产精品美女久久久久久2018| 国产精品久久久久蜜芽| 久久久久国色AV免费观看| 久久久久亚洲AV成人网人人网站 | 精品久久一区二区| 久久国产精品-国产精品| 亚洲伊人久久大香线蕉苏妲己| 中文字幕成人精品久久不卡| 国产高清美女一级a毛片久久w|