• <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年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

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

            常用鏈接

            留言簿(21)

            隨筆分類

            隨筆檔案

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

            我的個人網(wǎng)頁

            我的小游戲

            資源下載

            搜索

            •  

            積分與排名

            • 積分 - 493207
            • 排名 - 39

            最新評論

            閱讀排行榜

            評論排行榜

            作者:龍飛

            3.1:GNU的libiconv項目
            http://www.gnu.org/software/libiconv/
                    再一次的,感謝偉大的GNU。我們需要的是Unicode碼,在程序中轉(zhuǎn)換,我們需要相應(yīng)的庫。libiconv支持許多字符集,包括我們將用到的GB2312,UTF-8和UCS-2(Unicode)。具體的,在項目主頁上有詳細的說明。我們需要新學(xué)習(xí)直接用的類容并不繁多,同樣的,如果你沒什么興趣自己編譯源代碼,可以直接用在win32下編譯好的頭文件,庫和動態(tài)鏈接庫(DLL)。win32下的項目主頁是:
            http://gettext.sourceforge.net/
            有趣的是,作者把它作為了我們前面提到的gettext的一部分。在下載頁面上,我們直接選擇libiconv-win32,同樣的,我直接給出所需要的三部分文件的相關(guān)信息:
            iconv.h:頭文件,請在C++代碼中#include進來;
            iconv.lib:庫文件,在編譯時候使用;
            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)實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;
            我們用來轉(zhuǎn)換的字符串是“純中文”(為什么我要加引號重點說明,后面會有原因的解釋)"你好"。STR_SIZE是預(yù)留的轉(zhuǎn)換內(nèi)存空間。為什么不用動態(tài)存儲呢?因為我試過,有錯誤,可能是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)換,詳細內(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)解決問題了。但是有一個問題是,這樣轉(zhuǎn)換的編碼是8位的,即unsigned char,而SDL需要的是16位的,即Uint16;第二個問題是,我說了,這是純中文,你試試在“你”和“好”之間加段英語是什么效果?結(jié)論是,轉(zhuǎn)換不能正常進行,在遇到第一個非漢字的時候,就終止了。
                    問題還是沒解決,研究還得繼續(xù)。
            posted on 2008-03-30 12:45 lf426 閱讀(3145) 評論(0)  編輯 收藏 引用 所屬分類: SDL入門教程跨平臺與GNU
            久久精品卫校国产小美女| 久久综合九色综合97_久久久| 亚洲一区精品伊人久久伊人| 久久午夜福利无码1000合集 | 色婷婷久久综合中文久久蜜桃av| 久久婷婷激情综合色综合俺也去| 亚洲精品高清久久| 亚洲精品tv久久久久| 久久婷婷五月综合97色一本一本| 国产精品日韩欧美久久综合| yellow中文字幕久久网| 色老头网站久久网| 久久国产乱子伦精品免费强| 亚洲人成网亚洲欧洲无码久久 | 香港aa三级久久三级| 人妻无码精品久久亚瑟影视| 丁香狠狠色婷婷久久综合| 国产精品久久久久久五月尺| 久久免费视频网站| 欧美噜噜久久久XXX| 久久久久久久久波多野高潮| 国产精品99久久久久久董美香| 无码人妻久久久一区二区三区| 久久免费国产精品| 久久国产综合精品五月天| 国产美女久久精品香蕉69| 久久久高清免费视频| 日韩精品无码久久一区二区三| 国产精品久久国产精品99盘| 性色欲网站人妻丰满中文久久不卡| 亚洲午夜久久久| 久久这里的只有是精品23| 亚洲国产成人精品91久久久| 久久国产成人亚洲精品影院| 国产香蕉97碰碰久久人人| 草草久久久无码国产专区| 99久久99久久精品国产| 精品久久久久久国产牛牛app| 久久av免费天堂小草播放| 久久综合成人网| 97精品依人久久久大香线蕉97 |