• <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>
            posts - 319, comments - 22, trackbacks - 0, articles - 11
              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            QString對(duì)中文的支持問(wèn)題

            管理提醒: 本帖被 XChinux 執(zhí)行加亮操作(2008-10-29)
            很奇怪,我在一個(gè)工程里面是這樣用QString的:
            QString Qstr = "D:\\你好嗎?\\klfjsdl.jpg";
                std::string STDstr;
                STDstr = Qstr.toAscii();
            但是我在調(diào)跟蹤的時(shí)候,發(fā)現(xiàn)Qstr里面是亂碼!而STDstr里面卻是正確的值!
            而在另一個(gè)工程里面我是這樣用QString的:
            QString Qstr = QDirIterator.next();當(dāng) QDirIterator反回的是一個(gè)帶有中文的文件夾時(shí),QStr里面的值正常,而當(dāng)我用
            std::string STDstr = QStr.toStdString()或是std::string STDstr = Qstr.toAscii()時(shí),發(fā)現(xiàn)STDstr里面的中文字段是亂碼!我還用過(guò)Qstr.toUtf8();返回的結(jié)果也是亂碼,

            主要的的問(wèn)題是第如何將一個(gè)帶有中文的Qstring轉(zhuǎn)換成正確的std::string呢?



                                                        謝謝!!!!
            guanxu離線
            級(jí)別: 新手上路
            顯示用戶信息 
            1 發(fā)表于: 2008-10-29  
            程序中盡量不要用中文,包括所用的 文件夾,文件。。。。

            不只是 Qt 就算是系統(tǒng)。中文的路徑名,文件名也一直是個(gè)問(wèn)題。
            我現(xiàn)在的電腦上全是英文名(以前的 linux 中文文件夾是亂碼,所以用著用著習(xí)慣了)
            英文只有 26 個(gè)字母,算上大小寫(xiě),各種常用符號(hào),也不過(guò) 一百多個(gè)。
            中文字可多了去了。

            畢竟編程用的語(yǔ)言就是英文表示的,遵守一定的規(guī)范對(duì)誰(shuí)都方便。
            cwbcwb505離線
            級(jí)別: 新手上路
            顯示用戶信息 
            2 發(fā)表于: 2008-10-30  
            因?yàn)椴僮飨到y(tǒng)是中文操作系統(tǒng),程序中可以保證不用中文,可是文件目錄是不可能避免用中文,主要是我們做的程序不是自己用,而是要讓別人用,我們總不能賣東西的時(shí)候叫人家不要用中文文件夾吧
            water_wf離線
            級(jí)別: 騎士
            顯示用戶信息 
            3 發(fā)表于: 2008-10-30  
            常用的處理字符相關(guān)的函數(shù):
            QString str = QString::fromUtf8("xxx");
            QByteArray  = str.toUtf8();
            QByteArray = str.toLatin1();
            std::string str = QString().toUtf8().data();
            這個(gè)自己試下就會(huì)了
            mumutouv離線
            級(jí)別: 俠客
            顯示用戶信息 
            4 發(fā)表于: 2008-10-30  
            QString Qstr = QString::fromUtf8("D:\\你好嗎?\\klfjsdl.jpg");
            或者
            QString Qstr = QString::fromUnicode("D:\\你好嗎?\\klfjsdl.jpg");
            cwbcwb505離線
            級(jí)別: 新手上路
            顯示用戶信息 
            5 發(fā)表于: 2008-10-31  
                    樓上那位兄弟回答得很好,本人又有了一些新啟發(fā),不過(guò)有一個(gè)問(wèn)題是我那個(gè)QString是從
            QFileDialog::getExistingDirectory()得來(lái)的,所以我不能控制它得來(lái)的方式,像樓上所說(shuō)的用toUtf8我也用過(guò),當(dāng)時(shí)調(diào)試的時(shí)候也是錯(cuò)誤的!不過(guò)我仔細(xì)的揣摩了一下,發(fā)現(xiàn)原來(lái)QT有一個(gè)專門用于編碼之間的轉(zhuǎn)換的類——QTextCodec,然后我們的中文編碼又是——gb18030,而QT對(duì)字符串的處理與儲(chǔ)存都是用的Unicode,具體代碼如下:
            QTextCodec *code;
            QString          strImage;
            std::string      strbuffer;
            strImage = QFileDialog::getExistingDirectory(this, "Select image path");
            code = QTextCodec::codecForName("gb18030");
            strBuffer = code->fromUnicode(strImage).data();

            這樣我的strBuffer里面就得到了正確的中文文件目錄,但是我還是有搞不懂的地方就是QString是用的unicode,而std::string也是支持Uncode的,那為什么他們之間不能直接傳值呢?而是要通過(guò)轉(zhuǎn)換的,搞不懂
            級(jí)別: 新手上路
            顯示用戶信息 
            6 發(fā)表于: 2009-06-23  
            我用4樓的方法搞定了哦,不過(guò)還是不懂,高手能分析下么?
            songpeng離線
            級(jí)別: 新手上路
            顯示用戶信息 
            7 發(fā)表于: 2009-09-09  
            charlesjun你好!
               看見(jiàn)你們的帖子我很感激!
                  但是我還在沒(méi)有能解決!希望分享下成功方法
                 (我用的是windows下的《QT creator》編譯的)
                 用QFileDialog::getOpenFileName()獲取到的文件路徑名
                 如果打開(kāi)包含中文字符的路徑,賦值給QString file_name(應(yīng)是Unicode的)
                 然后我用qt的qDebug()函數(shù)打印在《QT creator》的輸出欄看到時(shí)中文字符就是亂碼
                《QT creator》輸出欄的打印:    Starting D:/stemperature_table2_0/debug/stemperature_table2_0.exe...
                                                                               llllllsongpengssssssss11 "C:/Documents and Settings/admin/×ÀÃæ/0000B.000" 
                      我想得到正確路徑然后再轉(zhuǎn)換成c++的string;目的是為了,我后面代碼用他來(lái)再次(用c++)來(lái)打開(kāi)文件!
                 我也試過(guò)樓上的那些方法好像沒(méi)有行!
                 希望提示下 等待佳音。。。。。。。。。。。。
            認(rèn)真的做我自己的事情!
            級(jí)別: 新手上路
            顯示用戶信息 
            8 發(fā)表于: 2009-12-03  
            在windows下,QString轉(zhuǎn)char*,使用toLocal8Bit().data()就能獲得,當(dāng)然前提你要是QString中是正確的中文,即

            str="我是中國(guó)人";
            qDebug()<<str;   //能輸出"我是中國(guó)人"。

            如果是在linux下,就跟系統(tǒng)有關(guān)系了。有區(qū)別的,而且如果是qt4,linux下中文還需要翻譯器。

            QString的中文變量聲明也是有區(qū)別的。

            linux下TextCodec是GBK的,而windows下是GB18030的。所以你可以在main.cpp中定義

                QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
                QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
                QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));

            或是
                QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030"));
                QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB18030"));
                QTextCodec::setCodecForTr(QTextCodec::codecForName("GB18030"));

            然后在使用QString中文是,采用QString::fromLocal8Bit("我是中國(guó)人").或tr("我是中國(guó)人")來(lái)進(jìn)行變量聲明。這樣才能正確顯示在窗體控件上,而不是亂碼。
            haulm離線
            級(jí)別: 俠客
            顯示用戶信息 
            9 發(fā)表于: 2009-12-03  
            引用
            引用第1樓guanxu于2008-10-29 20:02發(fā)表的  :
            程序中盡量不要用中文,包括所用的 文件夾,文件。。。。

            不只是 Qt 就算是系統(tǒng)。中文的路徑名,文件名也一直是個(gè)問(wèn)題。
            我現(xiàn)在的電腦上全是英文名(以前的 linux 中文文件夾是亂碼,所以用著用著習(xí)慣了)
            英文只有 26 個(gè)字母,算上大小寫(xiě),各種常用符號(hào),也不過(guò) 一百多個(gè)。
            .......


            標(biāo)準(zhǔn)答案就是不要在程序代碼中使用中文,標(biāo)準(zhǔn)的做法是把菜單關(guān)鍵字或摘要用tr()函數(shù)包裝,然后在main()中加載翻譯文件。
            為什么不用中文,試下就知道了,當(dāng)在程序代碼中使用了中文,你就無(wú)法國(guó)際化了,因?yàn)閷?dǎo)出要翻譯的文本不是中文而是一堆代表符號(hào)。

            主題 : 關(guān)于QString對(duì)中文的支持問(wèn)題
            haulm離線
            級(jí)別: 俠客
            顯示用戶信息 
            10 發(fā)表于: 2009-12-03  
            QString::fromLocal8Bit的用途最小或說(shuō)在實(shí)際編程中是沒(méi)有用的,tr()用途最廣。

            wd007離線
            級(jí)別: 論壇版主
            顯示用戶信息 
            11 發(fā)表于: 2009-12-05  
            使用tr()是很穩(wěn)妥的一種方式,這也是Qt 官方所極力推薦的。

            當(dāng)然這幾種方法都可以,我個(gè)人傾向于代碼中不使用中文符號(hào),使用tr(),然后進(jìn)行國(guó)際化。
            歡迎訪問(wèn)我的博客,一起學(xué)習(xí)提高
            http://blog.csdn.net/qter_wd007
            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久亚洲中文字幕精品一区| 无码人妻久久一区二区三区蜜桃| 久久亚洲私人国产精品vA| 2022年国产精品久久久久 | 久久婷婷五月综合97色直播| 欧洲国产伦久久久久久久| 久久久久AV综合网成人| 久久精品国产亚洲精品| MM131亚洲国产美女久久| 中文字幕无码久久久| 久久精品草草草| 亚洲狠狠婷婷综合久久久久| 久久强奷乱码老熟女网站| 青青草原1769久久免费播放| 人妻少妇久久中文字幕| 久久婷婷午色综合夜啪| 精品99久久aaa一级毛片| 久久99亚洲网美利坚合众国| 国产色综合久久无码有码| 性高湖久久久久久久久AAAAA| 日本道色综合久久影院| …久久精品99久久香蕉国产| 国产精品久久午夜夜伦鲁鲁| 日本强好片久久久久久AAA| 久久综合亚洲鲁鲁五月天| 人妻精品久久久久中文字幕| 狠狠精品干练久久久无码中文字幕 | 国产精品久久免费| 国产Av激情久久无码天堂| 色诱久久久久综合网ywww| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 97精品国产97久久久久久免费| 亚洲AV日韩AV永久无码久久| 久久天天躁夜夜躁狠狠躁2022| 无码人妻少妇久久中文字幕| 久久久久久亚洲精品不卡| 欧美激情精品久久久久久久九九九 | 婷婷久久五月天| 一本色道久久HEZYO无码| 无码精品久久久天天影视| 99久久中文字幕|