全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4439
推到 Plurk!
推到 Facebook!

Unicode Text file To ansi text file

缺席
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-10 13:07:21 IP:210.177.xxx.xxx 訂閱
各位:

我想問如何把一個unicode text file (e.g unicode.txt) 用coding 把它轉成一個Ansi text file?
Free component 可以做到嗎, 還是有其他方法?

註: 我用的是delphi5

Thanks
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-11-10 15:08:43 IP:203.67.xxx.xxx 訂閱
發問前請搜尋
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-11-12 10:33:41 IP:210.177.xxx.xxx 訂閱
多謝Coffee 提點...我找到這個好像比較適合我
http://delphi.ktop.com.tw/board.php?cid=168&fid=912&tid=88022

但iconv它是 C coding , 有沒有for delphi 的... 因為我急著要用, 所以可否請coffee多一點提點....謝謝
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-11-12 10:42:16 IP:220.130.xxx.xxx 訂閱
Search for WideCharToMultiByte
if it does not work, just try to import the code you need.
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
編輯記錄
Coffee 重新編輯於 2007-11-12 10:44:23, 註解 無‧
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-11-12 11:59:28 IP:210.177.xxx.xxx 訂閱
多謝Coffee再次提點, 我這樣寫 但在memo1裏最尾一行會出現亂碼,我在那裏出現問題?

[code delphi]
procedure TForm1.Button1Click(Sender: TObject);
var
pBuffer: PByte;
pwChr: PWideChar;
strmText: TFileStream;
sText: string;
begin
sText := Edit1.text;
strmText := TFileStream.Create(sText, fmOpenRead);
GetMem(pBuffer, strmText.Size);
try
strmText.Read(pBuffer^, strmText.Size);
pwChr:= PWideChar(pBuffer);
Inc(pwChr,1);
sText :=WideStringToStringEx(pwChr,950);
Memo1.lines.Add(sText);
finally
FreeMem(pBuffer);
strmText.Free;
end;
end;

function WideStringToStringEx(const WS: WideString; CodePage: Word): String;
var
L: Integer;

begin
L := WideCharToMultiByte(CodePage, 0, PWideChar(WS), -1, nil, 0, nil,
nil);
SetLength(Result, L-1);
WideCharToMultiByte(CodePage, 0, PWideChar(WS), -1, PChar(Result), L - 1,nil, nil);
end;

[/code]
Coffee
版主


發表:31
回覆:878
積分:561
註冊:2006-11-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-11-12 12:10:44 IP:220.130.xxx.xxx 訂閱
Check your code carefully, and you may know why.
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。
為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。
在引述到我的文時自然會儘量替各位想辦法,謝謝大家!
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-11-12 12:23:44 IP:210.177.xxx.xxx 訂閱
真不好意思coffee...小弟愚昧... 能否指點我的錯處在那裏?
SuperLowB
初階會員


發表:96
回覆:77
積分:34
註冊:2003-06-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-11-12 14:34:50 IP:210.177.xxx.xxx 訂閱
我試過修改了第15行 ,都會在最尾一行出現亂碼......點解?
e.g. 我個text file 裏有這一行
abc adfdf dfdf
按了button1後,就變成
abc adfdf dfdfO?D?D?




[code delphi]
procedure TForm1.Button1Click(Sender: TObject);
var
pBuffer: PByte;
pwChr: PWideChar;
strmText: TFileStream;
sText: string;
begin
sText := Edit1.text;
strmText := TFileStream.Create(sText, fmOpenRead);
GetMem(pBuffer, strmText.Size);
try
strmText.Read(pBuffer^, strmText.Size);
pwChr := PWideChar(pBuffer);
Inc(pwChr, 1);
sText :=WideCharToString(pwChr);
Memo1.lines.Add(sText);
showmessage('success');
finally
FreeMem(pBuffer);
strmText.Free;
end;
end;
[/code]
編輯記錄
SuperLowB 重新編輯於 2007-11-12 14:36:50, 註解 無‧
SuperLowB 重新編輯於 2007-11-12 14:47:02, 註解 無‧
SuperLowB 重新編輯於 2007-11-12 14:48:59, 註解 無‧
SuperLowB 重新編輯於 2007-11-12 14:49:34, 註解 無‧
系統時間:2017-12-12 12:24:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!