将 Turbopower XML Partner 与 Delphi XE 2 结合使用

发布于 2024-12-25 03:55:33 字数 607 浏览 1 评论 0原文

我们正在尝试将 Delphi 环境从 Delphi2007 迁移到 Delphi XE2。我们从 Sourceforge 下载了最新的 Turbopower xml 合作伙伴。网。当我们进行一个简单的测试来加载 xml 文件时,我们会收到错误“发现无效的 XML 字符”。我们的代码行

var 
   testxml : UnicodeString; // a normal String in Xe2 
   FModel: TXpObjModel;
 begin 
    FModel := TXpObjModel.Create(nil); //Step 1 
    FModel.LoadMemory(testxml[1], Length(testxml)); //Step2 
 end. 

代码在第 2 步失败。当变量“Textxml”类型更改为 ansiString 时,xml 会正确加载。

XML 编码是 UTF-8

类似的东西

<?xml version="1.0" encoding="UTF-8"> 

,所以有人可以建议我们如何加载存储在 Unicode 字符串变量类型中的 xml 数据吗?

We are trying to migrate our Delphi Environement from Delphi2007 to Delphi XE2. We dowloaded the latest Turbopower xml partner from Sourceforge. net. When we make a simple test to load a xml file we get an error "Invalid XML Character found" Our lines of code

var 
   testxml : UnicodeString; // a normal String in Xe2 
   FModel: TXpObjModel;
 begin 
    FModel := TXpObjModel.Create(nil); //Step 1 
    FModel.LoadMemory(testxml[1], Length(testxml)); //Step2 
 end. 

The code fails at Step 2. when the variable "Textxml" type is changed to ansiString Then the xml is loaded properly.

XML Encoding is UTF-8

something like this

<?xml version="1.0" encoding="UTF-8"> 

so can any one suggest us how to load xml data stored in Unicode string variable type?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

水晶透心 2025-01-01 03:55:33

您可以尝试将unicode字符串转换回UTF8,例如:

var
  textxml: UnicodeString;
  textutf: UTF8String;
  FModel: TXpObjModel;
begin
  textutf := Utf8Encode(textxml);
  FModel := TXpObjModel.Create(nil); //Step 1
  FModel.LoadMemory(textutf[1], ByteLength(textutf)); //Step2
end;

另外,您应该使用ByteLength()函数,因为内存中字符串的实际大小是Length*SizeOf(CharType)。

You can try to convert the unicode string back to UTF8, like:

var
  textxml: UnicodeString;
  textutf: UTF8String;
  FModel: TXpObjModel;
begin
  textutf := Utf8Encode(textxml);
  FModel := TXpObjModel.Create(nil); //Step 1
  FModel.LoadMemory(textutf[1], ByteLength(textutf)); //Step2
end;

Also, you should use ByteLength() function, because the real size of the string in memory is Length*SizeOf(CharType).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文