由于程序的需要我的使用这种方式存取Unicode文件:
保存文件时:
Stream := TMemoryStream.Create;
Flag := $FEFF;
Stream.Write(Flag, 2);
Stream.SaveToFile('C:\Temp\bb.txt');
想有这样写文件:
var
WStr: WideString;
FRes: TextFile;
begin
AssignFile(FRes,'C:\Temp\BB.txt');
Reset(FRes);
WriteLn(FRes,TntEdit1.Text); // 这里出现读写错误
CloseFile(FRes);
这样读文件:
AssignFile(FRes,'C:\Temp\BB.txt');
ReSet(FRes);
ReadLn(FRes,WStr);
TntEdit2.Text := WStr;
CloseFile(FRes);
读是读出来了,可是读出来是乱码。
请各位指正!
保存文件时:
Stream := TMemoryStream.Create;
Flag := $FEFF;
Stream.Write(Flag, 2);
Stream.SaveToFile('C:\Temp\bb.txt');
想有这样写文件:
var
WStr: WideString;
FRes: TextFile;
begin
AssignFile(FRes,'C:\Temp\BB.txt');
Reset(FRes);
WriteLn(FRes,TntEdit1.Text); // 这里出现读写错误
CloseFile(FRes);
这样读文件:
AssignFile(FRes,'C:\Temp\BB.txt');
ReSet(FRes);
ReadLn(FRes,WStr);
TntEdit2.Text := WStr;
CloseFile(FRes);
读是读出来了,可是读出来是乱码。
请各位指正!
我用这样的方法还没遇到读不到的文本
var
s:TStringList;
begin
s := TStringList.Create();
s.LoadFromFile('C:\Temp\BB.txt');
//for i:=0 to s.count-1 do //这是循环控制,自己根据实际改
Memo1.Text:=s.Strings[i]; //i是文本行数
end;
WriteLn(FRes,TntEdit1.Text); // 这里出现读写错误
把Reset(FRes);改ReWrite(FRes);如果需要从后插入改Append
读出时,再从UTF-8转换到 UCS-16.
// eg. 0031003200610062554A94B1658C --> 12ab啊钱斌
// OK! 20030208 QB
function UnicodeToAnsi(sStr:String):String;
var
sStr1: string;
wStr: WideString;
psStr1,psStr: PChar;
iUnicode,i,len: Integer;
begin
sStr1:='';
// 为sStr1申请200字节的空间
for i:=1 to 200 do sStr1:=sStr1+'-';
psStr1:=PChar(sStr1);
len:=Length(sStr);
i:=1;
while i<=len do
begin
// '554a' --> chr(0x55)+chr(0x4a)
psStr:=PChar(sStr)+i-1;
HexToBin(psStr, psStr1, 2);
// chr(0x55)+chr(0x4a) --> 21834
iUnicode:=ord(sStr1[1])*256+ord(sStr1[2]);
// 21834 --> '啊'
wStr:=wStr+WideChar(iUnicode);
i:=i+4;
end;
Result:=String(wStr);
end;// ANSI String --> Unicode string 中文格式编码
// eg. 12ab啊钱斌 --> 0031003200610062554A94B1658C
// OK! 20010710 QB
// function AnsiToUnicode(var s:WideString):String;
function AnsiToUnicode(sStr:String):String;
var
i,len: Integer;
cur: Integer;
t: String;
s: WideString;
begin
// WideString('1啊') --> '1啊'
s:= WideString(sStr);
Result:='';
// Length(WideString('1啊')) = 2 !!!
len:=Length(s);
i:=1;
while i<=len do
begin
// Unicode of '啊' --> 21834
cur:=ord(s[i]);
// 21834 --> '554a'
FmtStr(t,'%4.4X',[cur]); // ???? <-- 钱勤
Result:=Result+t;
inc(i);
end;
end;