您的位置:首页 > 其它

回复 "Globe" 关于 XML 编码转换的问题

2011-04-01 22:32 561 查看
问题来源:http://www.cnblogs.com/del/archive/2011/03/24/1994029.html#2059114

Globe 同学有这样的 XML 文件:



其中包含中文、韩文,并且有些是十六进制、有些是十进制,真实的内容应该是:



下面是把它打开并另存为标准的 UTF-8 格式 XML 的代码(使用了 DelphiXE 最新的正则表达式组件):

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, RegularExpressions;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
function MyMatchEvaluator(const Match: TMatch): string;
public
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
pattern = '&#x?[0-9A-Fa-f]{1,5};';
var
List: TStringList;
reg: TRegEx;
path,tmpName: string;
begin
with TOpenDialog.Create(nil) do begin
Execute;
path := FileName;
Free;
end;
if path = '' then Exit;

List := TStringList.Create;
List.LoadFromFile(path);
List.Text := StringReplace(List.Text, 'GB2312', 'UTF-8', [rfIgnoreCase]);
reg := TRegEx.Create(pattern, [roCompiled]);
List.Text := reg.Replace(List.Text, MyMatchEvaluator);

tmpName := ExtractFileName(path);
path := StringReplace(path, tmpName, 'UTF8_' + tmpName, [rfIgnoreCase]);
Text := path;
List.SaveToFile(path, TEncoding.UTF8);
List.Free;
end;

function TForm1.MyMatchEvaluator(const Match: TMatch): string;
begin
Result := Match.Groups[1].Value;
if Match.Value[3] = 'x' then Result := '$' + Result;
Result := WideChar(StrToInt(Result));
end;

end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: