var
ffileStream:TFileStream;
fAnsiBytes: string;
S: string;
begin
ffileStream:=TFileStream.Create(AFileName,fmOpenRead);
SetLength(S,ffileStream.Size);
ffileStream.Read(S[1],Length(S));
fAnsiBytes:= UTF8Decode(Copy(S,4,MaxInt));
Result:= fAnsiBytes;
end;
这段代码用delphi7读utf-8编码的文件。大部分能读出来。但还是有?,其实?是有字符的。字符上下都有^这种东东。
为什么啊?
9 个解决方案
#1
没试过,不太清楚
#2
可能Copy截取时长度的问题
#3
你看下具体是哪个字符会出问题, UTF8Decode转出来的是widestring,也就是unicode编码,你要的是ansistring,是国标编码,这两种编码字符集不完全相同,有些字符utf8里有,但国标里没有,就会出现你说的这种情况
#4
和ascii字符串不兼容吧。
#5
那我不转换成ansisring。我只是想把utf8的文字在memo里显示出来。
谁知道怎么做?
#6
fAnsiBytes:= UTF8Decode(Copy(S,4,MaxInt));
改为
fAnsiBytes:= Copy(UTF8Decode(S), 4, MaxInt);
改为
fAnsiBytes:= Copy(UTF8Decode(S), 4, MaxInt);
#7
function LoadUTF8File(AFileName: string): WideString;
var
ffileStream:TFileStream;
fAnsiBytes: WideString;
S: string;
begin
ffileStream:=TFileStream.Create(AFileName,fmOpenRead);
SetLength(S,ffileStream.Size);
ffileStream.Read(S[1],Length(S));
fAnsiBytes:= UTF8Decode(Copy(S,4,MaxInt));
Result:= fAnsiBytes;
end;
#8
我现在只用D2010
function LoadUTF8File(AFileName: string): String;
var
begin
SS := TStringStream.Create('', TEncoding.UTF8);
SS.LoadFromFile(AFileName);
Result := SS.DataString;
end;
用字符串流
function LoadUTF8File(AFileName: string): String;
var
begin
SS := TStringStream.Create('', TEncoding.UTF8);
SS.LoadFromFile(AFileName);
Result := SS.DataString;
end;
用字符串流
#9
我在网上看到说memo的组件显示utf8有些可能显示不出来。
fAnsiBytes:= Copy(UTF8Decode(S), 4, MaxInt);
这个转换还是不行。
2010能行是吗?
fAnsiBytes:= Copy(UTF8Decode(S), 4, MaxInt);
这个转换还是不行。
2010能行是吗?
#1
没试过,不太清楚
#2
可能Copy截取时长度的问题
#3
你看下具体是哪个字符会出问题, UTF8Decode转出来的是widestring,也就是unicode编码,你要的是ansistring,是国标编码,这两种编码字符集不完全相同,有些字符utf8里有,但国标里没有,就会出现你说的这种情况
#4
和ascii字符串不兼容吧。
#5
那我不转换成ansisring。我只是想把utf8的文字在memo里显示出来。
谁知道怎么做?
#6
fAnsiBytes:= UTF8Decode(Copy(S,4,MaxInt));
改为
fAnsiBytes:= Copy(UTF8Decode(S), 4, MaxInt);
改为
fAnsiBytes:= Copy(UTF8Decode(S), 4, MaxInt);
#7
function LoadUTF8File(AFileName: string): WideString;
var
ffileStream:TFileStream;
fAnsiBytes: WideString;
S: string;
begin
ffileStream:=TFileStream.Create(AFileName,fmOpenRead);
SetLength(S,ffileStream.Size);
ffileStream.Read(S[1],Length(S));
fAnsiBytes:= UTF8Decode(Copy(S,4,MaxInt));
Result:= fAnsiBytes;
end;
#8
我现在只用D2010
function LoadUTF8File(AFileName: string): String;
var
begin
SS := TStringStream.Create('', TEncoding.UTF8);
SS.LoadFromFile(AFileName);
Result := SS.DataString;
end;
用字符串流
function LoadUTF8File(AFileName: string): String;
var
begin
SS := TStringStream.Create('', TEncoding.UTF8);
SS.LoadFromFile(AFileName);
Result := SS.DataString;
end;
用字符串流
#9
我在网上看到说memo的组件显示utf8有些可能显示不出来。
fAnsiBytes:= Copy(UTF8Decode(S), 4, MaxInt);
这个转换还是不行。
2010能行是吗?
fAnsiBytes:= Copy(UTF8Decode(S), 4, MaxInt);
这个转换还是不行。
2010能行是吗?