青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

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

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

管理提醒: 本帖被 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里面的中文字段是亂碼!我還用過Qstr.toUtf8();返回的結(jié)果也是亂碼,

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



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

不只是 Qt 就算是系統(tǒng)。中文的路徑名,文件名也一直是個(gè)問題。
我現(xiàn)在的電腦上全是英文名(以前的 linux 中文文件夾是亂碼,所以用著用著習(xí)慣了)
英文只有 26 個(gè)字母,算上大小寫,各種常用符號(hào),也不過 一百多個(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ā),不過有一個(gè)問題是我那個(gè)QString是從
QFileDialog::getExistingDirectory()得來的,所以我不能控制它得來的方式,像樓上所說的用toUtf8我也用過,當(dāng)時(shí)調(diào)試的時(shí)候也是錯(cuò)誤的!不過我仔細(xì)的揣摩了一下,發(fā)現(xiàn)原來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的,那為什么他們之間不能直接傳值呢?而是要通過轉(zhuǎn)換的,搞不懂
級(jí)別: 新手上路
顯示用戶信息 
6 發(fā)表于: 2009-06-23  
我用4樓的方法搞定了哦,不過還是不懂,高手能分析下么?
songpeng離線
級(jí)別: 新手上路
顯示用戶信息 
7 發(fā)表于: 2009-09-09  
charlesjun你好!
   看見你們的帖子我很感激!
      但是我還在沒有能解決!希望分享下成功方法
     (我用的是windows下的《QT creator》編譯的)
     用QFileDialog::getOpenFileName()獲取到的文件路徑名
     如果打開包含中文字符的路徑,賦值給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;目的是為了,我后面代碼用他來再次(用c++)來打開文件!
     我也試過樓上的那些方法好像沒有行!
     希望提示下 等待佳音。。。。。。。。。。。。
認(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ó)人")來進(jìn)行變量聲明。這樣才能正確顯示在窗體控件上,而不是亂碼。
haulm離線
級(jí)別: 俠客
顯示用戶信息 
9 發(fā)表于: 2009-12-03  
引用
引用第1樓guanxu于2008-10-29 20:02發(fā)表的  :
程序中盡量不要用中文,包括所用的 文件夾,文件。。。。

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


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

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

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

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


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲欧美综合精品久久成人| 亚洲一区久久| 国产精品国色综合久久| 国产热re99久久6国产精品| 国产综合第一页| 午夜欧美不卡精品aaaaa| 麻豆精品在线视频| 久久成人免费| 国产精品另类一区| 亚洲人成7777| 亚洲第一主播视频| 亚洲欧美日本精品| 国产精品99免费看 | 欧美黄在线观看| 国产精品影视天天线| 亚洲私人影院在线观看| 欧美高清在线一区| 欧美成人一区二免费视频软件| 欧美一级在线视频| 国产精品www994| 西西人体一区二区| 99视频一区二区| 亚洲视频你懂的| 欧美精品久久99久久在免费线| 黄色精品一区二区| 欧美不卡一区| 久久亚洲视频| 亚洲免费激情| 91久久国产精品91久久性色| 欧美一级久久久久久久大片| 久久久夜色精品亚洲| 欧美激情一区二区三区蜜桃视频 | 欧美少妇一区二区| 亚洲欧美日韩国产一区二区三区 | 西瓜成人精品人成网站| 国产伦一区二区三区色一情| 亚洲人成久久| 亚洲美洲欧洲综合国产一区| 欧美极品在线播放| 亚洲专区在线| 亚洲欧美韩国| 国产欧美另类| 欧美激情视频在线播放| 免费欧美在线| 欧美在线黄色| 久久九九久久九九| 9久草视频在线视频精品| 亚洲欧洲一区二区在线观看| 久久成人av少妇免费| 亚洲日本aⅴ片在线观看香蕉| 亚洲第一精品夜夜躁人人躁| 欧美另类99xxxxx| 亚洲欧美综合网| 久热成人在线视频| 日韩亚洲在线| 亚洲一区精品电影| 亚洲人成在线播放网站岛国| 亚洲精品视频免费观看| 国产欧美日韩精品一区| 蜜月aⅴ免费一区二区三区| 欧美在线一二三四区| 亚洲欧洲一区二区天堂久久| 夜夜嗨av一区二区三区网页| 亚洲成在人线av| 亚洲精品资源美女情侣酒店| 国产一区视频观看| 亚洲日本中文字幕| 国产伦精品一区二区三区高清版 | 国模私拍视频一区| 在线综合视频| 在线看片成人| 亚洲一区二区三区免费观看| 极品尤物av久久免费看 | 欧美体内she精视频在线观看| 久久岛国电影| 国产精品二区在线观看| 模特精品裸拍一区| 欧美午夜在线观看| 亚洲精品免费网站| 国产午夜精品一区二区三区欧美 | 亚洲欧美国产不卡| 欧美一区二区三区久久精品茉莉花| 中文一区二区| 影音先锋日韩资源| 亚洲少妇诱惑| 亚洲天堂av图片| 久久精品国产视频| 久久黄色影院| 欧美午夜精品久久久久久超碰| 亚洲欧洲精品一区二区| 亚欧成人在线| 亚洲一区在线直播| 欧美午夜不卡视频| 91久久久国产精品| 亚洲伦理中文字幕| 美女视频黄免费的久久| 国产精品激情| 夜夜嗨av一区二区三区四季av | 欧美日韩精品一区二区三区四区| 久久综合狠狠综合久久综青草 | 亚洲天堂免费在线观看视频| 亚洲午夜精品久久久久久app| 免费看的黄色欧美网站| 亚洲欧美资源在线| 国产丝袜一区二区| 亚洲尤物在线| 久久久久中文| 国产一区二区日韩| 久久精品在线视频| 久久人91精品久久久久久不卡| 欧美日韩国产电影| 亚洲系列中文字幕| 性色av一区二区三区在线观看| 国产欧美精品| 亚洲欧美国产毛片在线| 久久精品91久久香蕉加勒比| 国产日本欧美一区二区| 亚洲精品久久久蜜桃| 亚洲欧美另类在线观看| 国产精品电影网站| 久久久久久久999精品视频| 久久尤物电影视频在线观看| 亚洲欧洲日本专区| 欧美激情视频免费观看| 久久国产成人| 亚洲国产精品成人久久综合一区| 久久久久国产精品www | 日韩午夜中文字幕| 亚洲影院免费| 在线欧美视频| 欧美成ee人免费视频| 一本色道久久88亚洲综合88| 亚洲欧美日韩一区二区三区在线| 欧美国产精品| 欧美亚洲综合在线| 蜜桃av一区二区三区| 一区二区精品国产| 国产伦理一区| 欧美日韩四区| 香蕉免费一区二区三区在线观看| 欧美激情精品久久久久久久变态| 99pao成人国产永久免费视频| 国产亚洲一区二区三区| 你懂的国产精品永久在线| 亚洲国产成人av| 美女精品一区| 欧美成人亚洲| 国产精品亚洲第一区在线暖暖韩国| 亚洲一区二区成人在线观看| 9i看片成人免费高清| 亚洲一区二区精品在线| 亚洲午夜免费视频| 欧美日韩和欧美的一区二区| 亚洲欧洲午夜| 一本色道久久综合| 欧美日韩另类一区| 亚洲精品一区二区三区在线观看| 亚洲精品一级| 欧美成人激情视频| 久久夜色精品国产欧美乱| 国产欧美精品久久| 欧美一区二区在线视频| 欧美专区第一页| 国产女主播一区二区三区| 亚洲一区图片| 久久精品国语| 国产一区二区日韩精品欧美精品| 欧美亚洲在线| 美日韩精品视频免费看| 亚洲盗摄视频| 欧美大片在线观看一区| 亚洲精品综合| 西瓜成人精品人成网站| 国产一区二区av| 久久久噜噜噜久久人人看| 免费观看一区| 一本色道精品久久一区二区三区| 国产精品扒开腿爽爽爽视频| 国产精品99久久久久久久久| 欧美一区视频| 在线免费日韩片| 欧美精品久久一区| 亚洲女人av| 欧美激情一区二区三区高清视频 | 欧美三日本三级三级在线播放| 在线一区日本视频| 久久综合图片| 欧美伊人久久| 亚洲国产精品一区二区尤物区| 欧美激情一区二区三区| 亚洲欧美激情诱惑| 亚洲电影下载| 久久激情视频| 亚洲性感激情| 亚洲大黄网站| 国产精品伦一区| 欧美日韩国产一中文字不卡| 久久精品99久久香蕉国产色戒| 亚洲激情偷拍| 老色鬼精品视频在线观看播放 |