为什么GB2312转换到UTF8,中文全部变为问号?

mingyu92 2011-07-11 11:16:50
我是把百度新闻RSS从GB2312转换为UTF-8,重写了TNativeXml的LoadFromStream方法。
TMyNativeXml = class(TNativeXml)
public
procedure LoadFromStream(AStream: TStream;AEncoding: TEncoding); reintroduce;
end;

procedure TMyNativeXml.LoadFromStream(AStream: TStream;AEncoding: TEncoding);
var
LBuffer,LByteOrderMark: TBytes;
LOffset: Integer;
LEncoding,DestEncoding: TEncoding;
LMemStm: TMemoryStream;
begin
LEncoding:=nil;
if not Assigned(AEncoding) then
begin
inherited LoadFromStream(AStream);
Exit;
end
else
begin
DestEncoding:=AEncoding;
SetLength(LBuffer,AStream.Size);
AStream.ReadBuffer(LBuffer[0],Length(LBuffer));
LOffset:=TEncoding.GetBufferEncoding(LBuffer,LEncoding);
LBuffer:=TEncoding.Convert(LEncoding,DestEncoding,LBuffer,LOffset,Length(LBuffer)-LOffset);
LMemStm:=TMemoryStream.Create;
try
LByteOrderMark:=DestEncoding.GetPreamble; {获取编码识别符(BOM)}
LMemStm.Write(LByteOrderMark[0],Length(LByteOrderMark));
LMemStm.Write(LBuffer[0],Length(LBuffer));
LMemStm.Position:=0;
inherited LoadFromStream(LMemStm);
finally
FreeAndNil(LMemStm);
end;
SetLength(LBuffer,0);
SetLength(LByteOrderMark,0);
end;
end;

使用是:
var XmlParser:TMyNativeXml;
XmlParser:=TMyNativeXml.Create(Self);
XmlParser.LoadFromStream(TheStream,TEncoding.UTF8);
...全文
1004 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
山东蓝鸟贵薪 2011-07-11
  • 打赏
  • 举报
回复
没用过UTF-8,帮你顶一下.....
mingyu92 2011-07-11
  • 打赏
  • 举报
回复
自己顶一下。
如果xml是UTF-8的话,就没有问题(不转换);如果是GB2312,中文全部变为‘?’。
求解!

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧