Unicode的文件讀入 |
|
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
引言: http://homepage3.nifty.com/m-and-i/tips/unicode.htm Unicode的文件讀入 Unicode的文本文件引入、Shift-JIS的文本作為歸還函數。 DOS或Windows的手續(Little Endian)事情與、Big Endian事情的二有。文件Unicode或是怎麼樣簡易確切判別在……中、那個文件的前頭2byte研究、$FFFE如果Little Endian的Unicode,$FEFF如果Big Endian的Unicode與判定(以來規章、二進制文件的前頭上述的井領著那個時在……中當然錯誤啟動有)。 // Unicode(Little Endian)的文件讀擁擠Shift-Jis的文本歸還 // 文件的前頭2byte$FFFE如果Little Endian function LoadUniLi(const FileName: string): string; var Fs: TFileStream; Sz: integer; Pc: PChar; begin Result :=''; Fs := TFileStream.Create(FileName, fmOpenRead); try Fs.Position := 0; sz := Fs.Size; try Pc := AllocMem(sz 10); Fs.Seek(0, soFromBeginning); try if Fs.Read(Pc^, sz) = sz then begin Result := WideCharToString(PWideChar(Pc 2));//前頭2byte版頭畫 end; finally FreeMem(Pc); end; except raise Exception.Create('內存確保不能.'); end; finally Fs.Free; end; end; // Unicode(Big Endian)的文件讀擁擠Shift-Jis的文本歸還 // 文件的前頭2byte$FEFF如果Little Endian function LoadUniBi(const FileName: string): string; var Fs: TFileStream; Sz, n: integer; Pc: PChar; Tc: char; begin Result := ''; Fs := TFileStream.Create(FIleName, fmOpenRead); try Fs.Position := 0; sz := Fs.Size; try Pc := AllocMem(sz 10); Fs.Seek(0, soFromBeginning); try if Fs.Read(Pc^, sz) = sz then begin n := 0; // Word的Low, High調換凍僵(什麼原始的的方法) while n < sz do begin Tc := (Pc n)^; (Pc n)^ := (Pc n 1)^; (Pc n 1)^ := Tc; Inc(n, 2); end; Result := WideCharToString(PWideChar(Pc 2));//前頭2byte版頭畫 end; finally FreeMem(Pc); end; except raise Exception.Create('內存確保不能.'); end; finally Fs.Free; end; end; 這單位的使用改變或部分挪用也包含自由。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |