這段代碼是我網路上找到的,在delphi7上運行正常無亂碼,但在d2010上卻怎么除錯都不行,請高手幫忙查查,怎么處理這個亂碼問題。我搜資料得到的資訊是D2010處理中文內容是1個自己,但D7是2個自己。
(另說明,這段代碼好像在回傳值沒有中文情況下,也是亂碼)
procedure _AddInfo(mmInfo: TMemo; S: string; var line: string);
var
I, p: Integer;
begin
if mmInfo.Lines.Count > 800 then
mmInfo.Lines.Clear;
for I := 0 to length(S) - 1 do
if S[I] = #13 then
S[I] := ' ';
line := line + S;
p := Pos(#10, line);
if p > 0 then
begin
// mmInfo.Lines.Add(Copy(line, 1, p - 1));
mmInfo.Lines.Add(Copy(line, 1, p - 1));
line := Copy(line, p + 1, length(line) - p);
end;
end;
procedure CmdExecAndView(FileName: PChar; memo: TMemo);
var
hReadPipe, hWritePipe: THandle;
si: STARTUPINFO;
lsa: SECURITY_ATTRIBUTES;
pi: PROCESS_INFORMATION;
//cchReadBuffer: WCHAR;
cchReadBuffer: dword;
ph: PChar;
fname: PChar;
line, readLine: string;
begin
fname := allocmem(1024);
ph := allocmem(1024);
lsa.nLength := SizeOf(SECURITY_ATTRIBUTES);
lsa.lpSecurityDescriptor := nil;
lsa.bInheritHandle := true;
if CreatePipe(hReadPipe, hWritePipe, @lsa, 0) = False then
Exit;
FillChar(si, SizeOf(STARTUPINFO), 0);
si.cb := SizeOf(STARTUPINFO);
si.dwFlags := (STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW);
si.wShowWindow := SW_HIDE;
si.hStdOutput := hWritePipe;
si.hStdError := hWritePipe;
StrPCopy(fname, FileName);
if CreateProcess(nil, fname, nil, nil, true, 0, nil, nil, si, pi) = False then
begin
FreeMem(ph);
FreeMem(fname);
Exit;
end;
CloseHandle(hWritePipe);
while (true) do
begin
if not PeekNamedPipe(hReadPipe, ph, 1, @cchReadBuffer, nil, nil) then
break;
if cchReadBuffer <> 0 then
begin
if ReadFile(hReadPipe, ph^, 4096, cchReadBuffer, nil) = False then
break;
ph[cchReadBuffer] := chr(0);
memo.Lines.Add(ph);
//_AddInfo(memo, ph, line);
end
else if (WaitForSingleObject(pi.hProcess, 0) = WAIT_OBJECT_0) then
break;
Application.ProcessMessages;
Sleep(200);
end;
ph[cchReadBuffer] := chr(0);
memo.Lines.Add(ph);
//_AddInfo(memo, ph, line);
CloseHandle(hReadPipe);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
FreeMem(ph);
FreeMem(fname);
end;
uj5u.com熱心網友回復:
這要看你具體執行的程式回傳的字符編碼了。也許是UTF-8之類的
uj5u.com熱心網友回復:
怎么看回傳的字符編碼?
我測驗簡單的echo 得到都是亂碼
uj5u.com熱心網友回復:
批量替換
String替換為AnsiString
PChar替換為PAnsiChar
uj5u.com熱心網友回復:
不需要替換.
在單元上面加一個
type
string = ansistring;
pchar = pansichar;
即可
uj5u.com熱心網友回復:
pchar可以這么干,string不行的
uj5u.com熱心網友回復:
批量替換
String替換為AnsiString
PChar替換為PAnsiChar
不需要替換.
在單元上面加一個
type
string = ansistring;
pchar = pansichar;
即可
pchar可以這么干,string不行的
行不行你試過就知道
uj5u.com熱心網友回復:
批量替換
String替換為AnsiString
PChar替換為PAnsiChar
不需要替換.
在單元上面加一個
type
string = ansistring;
pchar = pansichar;
即可
眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......
值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......