線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3606
推到 Plurk!
推到 Facebook!

請問有高手做過Unicode與AnsiString間的轉換嗎????

答題得分者是:隆妹
z858328y
一般會員


發表:7
回覆:9
積分:3
註冊:2006-08-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-19 09:46:34 IP:61.217.xxx.xxx 訂閱
各位高手:
小弟最近在做個案子,是有關於讀取一個Unicode的檔案的。可是我的程式碼無論如何都沒有辦法把Unicode的檔案給讀進來,在網路上查的方法也都用過了,但是我讀字串用的buffer始終是空的(在檔案中有中文也有英文,英文可以讀成雙字元格式,中文就是亂碼,最後轉到WideString及AnsiString就沒有東西了),希望有經驗的可以幫個忙,看看問題在哪囉,謝謝。附上小弟的程式碼及程式(BCB5)

void __fastcall CLanguage::GetText()
{
wchar_t cData[1000];
int nCount=0;
FILE *fp;
char str[1000];
AnsiString strNo="",strDetect,strSub;
CStringW wstr;

if( (fp = fopen(m_strFileName.c_str(),"r")) != NULL )
{
while( fgetws(cData,1000,fp) != NULL )
{
try{
WideCharToMultiByte(CP_ACP,0,cData,100,(LPSTR)str,100,NULL,NULL);
//strDetect.WideChar(str,100);
//wsprintf(tc,"%C",cData);
str = CStringW(cData);
strDetect = AnsiString(str);
//strDetect = AnsiString(cData,1000);
strDetect = strDetect.Delete(strDetect.Pos("\n"),strDetect.Length());
if( strDetect.Pos("[") == 0 )
{
strSub = strDetect.SubString(1,strDetect.Pos("\t")-1);
m_strLanguage[(strSub.ToInt()-101)]
= strDetect.Delete(1,strDetect.Pos("\t"));
nCount ;
}
}
catch(...){
fclose(fp);
}
}
}
else
ShowMessage("Can't not open file");

fclose(fp);
}

隆妹
一般會員


發表:6
回覆:12
積分:8
註冊:2003-10-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-30 02:38:18 IP:203.204.xxx.xxx 訂閱
請自行參考研究  iconv 這套 open source 的 library
再配合 FILE 及 fgetc 即可做到此功能
z858328y
一般會員


發表:7
回覆:9
積分:3
註冊:2006-08-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-30 11:42:40 IP:61.217.xxx.xxx 訂閱
謝謝大大的幫忙,我會參考的,真是萬分感激呀
disabledman
一般會員


發表:0
回覆:5
積分:6
註冊:2004-02-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-05-21 17:49:30 IP:210.208.xxx.xxx 訂閱

>> if( (fp = fopen(m_strFileName.c_str(),"r")) != NULL )
在此之後,設定 FILE MODE 即可以.
如 _setmode(fileno(f), _O_U8TEXT)
------
生生堂
系統時間:2024-04-17 7:40:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!