Delphi 7 中的 Soap 信封标头不包括 utf-8 编码。我该如何修改它?

2024-04-03

我在接收来自 Delphi 7 客户端的无效非 ascii 字符时遇到问题,该客户端将 utf-8 编码的 XML 发送到字符串参数中的 C# WebService。使用 .Net 客户端,可以毫无问题地接收字符。我尝试了很多方法,但似乎都不起作用,因此我决定使用 Wireshark 跟踪 SOAP 对话。对于 .Net 客户端,SOAP 信封的 XML 采用 utf-8 编码,如下所示:

POST //TesteService/ServicoAgente.asmx HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.3615)
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://example.com/ValidarTransacao"
Host: 192.168.254.2
Content-Length: 1530
Expect: 100-continue
Connection: Keep-Alive

HTTP/1.1 100 Continue

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body> .....

然而,对于Delphi 7 SOAP header,不包括编码头,如下:

POST /TesteService/ServicoAgente.asmx HTTP/1.1
SOAPAction: "http://example.com/ValidarTransacao"
Content-Type: text/xml
User-Agent: Borland SOAP 1.2
Host: 192.168.254.1
Content-Length: 1548
Connection: Keep-Alive
Cache-Control: no-cache

<?xml version="1.0"?>

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Body> .....

我的 XML 作为参数包含在 SOAP 主体内,其中包含一些显示为 ?? 的非 ascii 字符。在我收到来自 Delphi 客户端的方法后,在 C# Web 服务中,这在我看来是唯一合乎逻辑的解释。当我在发送之前在 Delphi 中检查 XML 时,它的编码是完美的,但是在接收端,我得到 ??。
在使用 WSDL 导入器导入的单元上,它指定 utf-8,如下所示:

initialization
  InvRegistry.RegisterInterface(TypeInfo(TesteAgentSoap), 'http://example.com/', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(TesteAgentSoap), 'http://example.com/%operationName%');
  InvRegistry.RegisterInvokeOptions(TypeInfo(TesteAgentSoap), [ioDefault, ioDocument, ioHasReturnParamNames, ioHasNamespace]);

end.

如何更改 SOAP 信封的 XML 编码?任何想法还有什么可能是错误的?我认为合乎逻辑的是,如果 SOAP 信封的 XML 未正确编码为 utf-8,那么该 XML 中的 XML 将无法正确读取
非常感谢您的宝贵时间


如果您使用 HTTPRio / HTTPWebNode 也许这会有所帮助:

  • 将 HTTPRIO.Converter.Options.soUTF8InHeader 设置为 True
  • 将 HTTPWebNode.UseUTF8InHeader 设置为 True

(found here http://www.delphigroups.info/2/1/345588.html)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi 7 中的 Soap 信封标头不包括 utf-8 编码。我该如何修改它? 的相关文章

  • 公共领域还好吗?

    在你像我最初那样做出直觉反应之前 请阅读整个问题 我知道它们让你感觉很脏 我知道我们以前都被烧伤过 我知道这不是 好风格 但是公共场所可以吗 我正在开发一个相当大规模的工程应用程序 该应用程序创建并使用结构的内存模型 从高层建筑到桥梁再到棚
  • C++/CLI 中的 Lambda 表达式

    如何在 C CLI 中使用 lambda 表达式 在 C 中 lambda 实际上只是用于创建委托的语法糖 C CLI支持代表 http www functionx com cppcli classes Lesson15c htm 因此您仍
  • 在 foreach 循环中更改另一个结构内的结构

    打印以下代码 调用 MyMethod 时 0 0 0 1 我希望它打印 0 0 1 1 为什么是这样 Code private struct MyStruct public MyInnerStruct innerStruct private
  • 在 tlistbox 中绘制缩略图

    在 DelphiXE 中 我使用 tFileOpenDialog 选择一个文件夹 然后在 tListBox 中列出该文件夹中的所有 jpg 文件 我允许将列表项拖放到列表中进行自定义排序 以便稍后按顺序显示它们 我希望能够在文件名旁边绘制图
  • 正则表达式获取模式的最后一次出现

    我有一个字符串 我需要选择最后一次出现的模式 该字符串是 1302638400000 0 0 1302724800000 0 610 64999999999998 1302811200000 0 2266 6500000000001 130
  • Perl:管理 Windows 上的路径编码

    我正在努力处理包含非英文字符的路径 Activestate Perl Windows XP 如何打开 写入 复制等位于包含希腊语 俄语 法语重音字符的路径中的文件 假设我要将 text txt 文件复制到的目录是 C Documents a
  • 从 Microsoft Chart Control 单击数据标记获取鼠标单击事件

    我的应用程序中有一个 net 4 0 点图 我想捕获鼠标在数据标记上的点击 当用户单击特定点时 我想转到绑定表中数据来自的行 此功能是否内置于 net 图表控件中 编辑 我发现我可能实际上想要光标位置值 而不是要求用户单击特定的数据点 一旦
  • 为什么我无法在 Mac OS X Terminal.app 上的 Python 解释器中显示 unicode 字符?

    如果我尝试粘贴 unicode 字符 例如中间的点 在我的 python 解释器中它什么也不做 我在 Mac OS X 上使用 Terminal app 当我只是在 bash 中时 我没有遇到任何问题 但在解释器中 python Pytho
  • 检查字符串是否编码为 UTF-8

    function seems utf8 str length strlen str for i 0 i lt length i c ord str i if c lt 0x80 n 0 0bbbbbbb elseif c 0xE0 0xC0
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 构建机器是否需要单独的 Delphi XE4 许可证?

    用于通过以下方式构建应用程序dcc32在构建服务器上我可以使用 Delphi Trial 这种方法的许可证没有任何问题 现在 我将通过以下方式在 TeamCity 上构建 Delphi XE4 应用程序msbuild 我是否需要拥有构建机器
  • 获取控制器视图上的列表数据

    我有一个视图 其中我在循环中渲染了部分视图 有一个列表 部分视图与列表中的每个项目绑定 输入值后 我没有在控制器上获取列表的值 这是我的观点 table class table width 100 border 0 thead tr sty
  • 如何使用 vim 更改文件的编码?

    我习惯使用 vim 修改文件的行结尾 file file file ASCII text with CRLF line terminators vim file set ff mac wq file file file ASCII text
  • 显示对话框而不阻止调用者

    我有一个强大的命名程序集 以前曾有人问过这个问题 但只是出于不同的目的 我有一个表单基类 当实现类在基类上设置属性时IsBusy 我想阻止与表单的所有交互 设置 Enabled false 是不够的 我还想阻止移动 调整大小 关闭等 并且我
  • 如何使用 LibGit2Sharp 从 Git 获取更改?

    下面的代码将 Git url 克隆到测试目录 var url http abc 555 com team project 555 git var path E temp 555 var credential new Credentials
  • 装配和产品版本不匹配

    我正在尝试在 asp net 网站中使用 Ajax 控件工具包 我从之前的一个示例项目中复制了 dll 它有以下详细信息 Assembly Version 3 5 40412 0 File Version 3 5 40412 2 Inter
  • 使用 (Object as TClass) 和 TClass(Object) 进行强制转换有什么区别

    有问题在哪里MyObj classnameis TMyClass classname 是真的并且TMyClass MyObj 有效但是 MyObj as TMyclass doSomething抛出转换错误 我真的不需要任何关于这些垃圾的帮
  • 如何使用 .NET Core 解析 MPEG 视频流

    对于个人项目 我尝试读取 IP 摄像机的 MPEG 流 并对收到的各个帧执行一些计算机视觉任务 使用 NET Core 2 2 我执行一个GET向相机的 MPEG 端点发出请求 我收到一个multipart x mixed replace响
  • 在 Visual Studio 2012 Express 上通过 Nuget 的 NUnit.Runners 不起作用

    我正在尝试使用 NuGet 管理器在 Visual Studio 2012 Express 中设置简单的 NUnit 项目 从 PROJECT gt Manage NuGet Packages 我安装了 NUnit 框架 并想要添加 NUn
  • 为什么 .Net 框架指南建议您不要使用 ref/out 参数?

    显然 他们很 混乱 这是认真的原因吗 你还能想到其他的吗 你见过有多少开发人员并不真正理解 ref out 吗 我在真正需要的地方使用它们 但在其他地方则不然 它们通常仅在您想有效返回两个或多个值时才有用 在这种情况下它至少值得thinki

随机推荐

  • 将 Django 开发数据库 (.sql3) 迁移到 Heroku

    如何将 Django sql3 开发数据库迁移到 heroku Per here https stackoverflow com questions 14500631 how can i upload a db to heroku and
  • Django 权限,自己编码还是使用应用程序?

    这个问题 我认为 是关于 Django 中的对象 行级别权限 我们正在构建一个社区 需要能够根据用户采取的操作设置权限 例如 在您发布了如此多的答案之前 您不应该能够启动线程 此外 用户应该能够删除属于自己的内容 根据 Django 文档
  • 暂停 knockout.js 1.2.1 中的绑定

    淘汰赛中有暂停和恢复绑定的选项吗 版本 knockout js 1 2 1 我们需要暂停绑定的原因如下 在某些操作过程中 我们必须从服务器加载大量数据 例如 多个选择的整个数据都已更改 有些表的行是动态添加的等 现在 在当前场景中 表单与视
  • 如何定期刷新Excel中的数据库数据?

    在我正在制作的 Excel 电子表格 VBA 脚本中 我需要从数据库调用数据 并每 5 分钟刷新一次值 该程序从按下按钮开始 并且应该连续运行 直到用户中断执行 我目前不确定如何让 Excel VBA 等待 5 分钟而不暂停电子表格 并且理
  • 布尔表达式+短路

    我想用布尔表达式 短路求值打印一条消息 我不允许使用 if while for 但在 C Lion 中一切正常 但在其他编译器中它说 hw2q1 c In function decision hw2q1 c 38 55 error valu
  • C 8位16位32位编译器之间的区别[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Log4j RollingFileAppender 未将映射器和减速器日志添加到文件中

    我们希望将应用程序日志打印到本地节点上的文件中 我们使用 Log4j 的 RollingFileAppender Our log4j properties文件如下 ODS LOG DIR var log appLogs ODS LOG IN
  • 如何在Android资源中使用unicode?

    我想用this http www fileformat info info unicode char 1f4e1 index htm我的资源文件中的 unicode 字符 但无论我做什么 我都会以 dalvikvm 崩溃结束 使用 Andr
  • 在 Java 中读取 CDATA XML

    我正在尝试解析 XML 中的 CDATA tpyes 代码运行良好 它将在控制台中打印 Links 大约 50 次 因为这就是我拥有的链接数量 但链接不会出现 它只是一个空白的控制台空间 我可能会错过什么 package Parse imp
  • 获取用户最后拍摄的照片

    嘿 我想获取用户通过任何相机应用程序拍摄的最后一张照片 我不知道该怎么做 谁能帮我 此外 我想将该图像作为电子邮件或彩信的附件发送 thanks Find the last picture String projection new Str
  • 在 sails.js 中,如何访问控制器外部的会话变量?

    在控制器中 这很容易 访问会话变量很简单 req session x 1 但是 我如何访问该外部控制器 喜欢服役吗 module exports test function No req session here 您可以创建一个将注册的主控
  • 如何在 IntelliJ 中更改 Maven 的 Java 版本?

    我对 Maven 和 IntelliJ IDEA 都很陌生 我有一个用 Java 8 编写的 Maven 项目 每当我尝试构建它 Maven 项目窗口 gt 生命周期 gt 编译 gt 运行 Maven Build 时 我都会收到一系列编译
  • 保留字行为[重复]

    这个问题在这里已经有答案了 在创建一个基于计数器的小型游戏时 我有一个像这样的数组 var status day dusk night dawn 如果我尝试访问数组的第一个索引 我会得到 console log status 0 yield
  • 对拳击感到困惑。将 -1 转换为 Int64 会抛出 InvalidCastException

    好吧 我一定忽略了一些非常简单的事情 但我迷路了 鉴于这种 object val 1 var foo Int32 val var bar Int64 val 转换为 Int64 会引发 InvalidCastException 我知道这与拳
  • 客户端与服务器术语

    我总是把这两个术语混淆 如何判断哪一方是服务器 哪一方是客户端 是根据发送还是接收数据来决定的 假设连接是单向的 谢谢你 In TCP https en wikipedia org wiki Transmission Control Pro
  • 如何控制png的字体大小?

    我正在尝试为手稿制作图表 该手稿应该用 MS Word 编写 它不接受 pdf 格式的图表 该期刊要求在 Word 文件中嵌入图形的初稿 这些图的分辨率至少为 300 dpi 宽度为 169 毫米或 81 毫米 两列 一列 我注意到 当我将
  • SQL Server 2012。异常:尝试读取或写入受保护的内存(MS.VS.OLE.Interop)

    我更像是 SQL Server 2012 的最终用户 当我右键单击表名称并选择 编辑前 200 行 菜单项时 我收到这条消息 Exception has been thrown by the target of an invocation
  • 发送电子邮件无需密码

    我正在开发一个安卓应用程序 在我的 Android 应用程序中 我有反馈表 我将用户的电子邮件 ID 作为输入 我希望当用户单击提交按钮时应该发送电子邮件 我不希望该用户为此添加他 她的密码 我已经检查了默认方法Intent以及下面链接中的
  • Android 锁密码组合

    我刚刚从我的同事那里听到了这个有趣的问题 我现在正在尝试 但同时我想我可以在这里分享 Android 主屏幕上显示的密码网格中 可能有多少个有效密码 密码最小长度 4 最大 9 如果我错了请纠正我 Summary 4 到 9 个独特数字的完
  • Delphi 7 中的 Soap 信封标头不包括 utf-8 编码。我该如何修改它?

    我在接收来自 Delphi 7 客户端的无效非 ascii 字符时遇到问题 该客户端将 utf 8 编码的 XML 发送到字符串参数中的 C WebService 使用 Net 客户端 可以毫无问题地接收字符 我尝试了很多方法 但似乎都不起