【问题标题】:Using Turbopower XML Partner with Delphi XE 2在 Delphi XE 2 中使用 Turbopower XML Partner
【发布时间】:2012-01-06 12:15:19
【问题描述】:

我们正在尝试将我们的 Delphi 环境从 Delphi2007 迁移到 Delphi XE2。我们从 Sourceforge 下载了最新的 Turbopower xml 合作伙伴。网。当我们做一个简单的测试来加载一个 xml 文件时,我们得到一个错误“Invalid XML Character found”我们的代码行

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 数据?

【问题讨论】:

  • 我可以建议您放弃 Turbo Power XML 合作伙伴并转到不需要您调用非类型化参数和自己处理字节缓冲区管理的 OmniXML。多么丑陋的 API。
  • @WarrenP 在这里。 Turbo Power 的东西已经死了,你真的应该尝试转向积极维护的 XML 库。
  • 我突然想到,虽然 XML Partner COMPILES 现在在 Delphi 2009 和 XE 和 XE2 中运行良好,但它甚至可能还没有完全支持 Unicode,并且支持 Unicode。不应假设这些事情,尤其是在任何人不再积极使用的旧技术上。
  • 感谢大家的建议。现在我们将研究 OmniXML 的选项。关于 Hyperstr 单元的另一个问题。是否有人进行了任何更改以使其与 Delphi Xe2 或 Delphi 2009 兼容。我们使用 Hypestr 单元进行更快的字符串操作。或者任何人都可以建议 Hyperstr 的任何替代方案。
  • 您好,别忘了accept the answers,它帮助您解决了您遇到的问题。请再问一个关于Hyperstr 的问题,这个问题已经名声在外。我 ♥ OmniXML ;)

标签: delphi delphi-xe2 turbopower


【解决方案1】:

您可以尝试将 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)。

【讨论】:

  • 你可以写textutf := textxml,让编译器来做
  • 显式优于隐式
  • 嗯,我想我可能会同意你的反思
  • textutf := textxml 不等于 textutf := Utf8Encode(textxml)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 2017-10-24
  • 2014-01-13
  • 2011-12-14
  • 1970-01-01
相关资源
最近更新 更多