强制浏览器以 ISO-8859-1 而不是 UTF-8 格式发送 post 数据

Force Browser to send post data as ISO-8859-1 and not UTF-8

我必须向无法解码 UTF-8 数据的服务器(带有 CICS TS 2.1 的 IBM z/VSE)发送 post 请求。

所以我必须强制浏览器或我的 javascript ajax post 调用不转换为 UTF-8。我已经开始工作了,他通过在 jquery ajax 调用中设置自己的 contentType 从 content-type header 中删除了 charset=UTF-8 字符串。所以服务器已经认为它是 ISO-8859-1,他可以将其解码为 EBCDIC。但是对于德语 Umlaute 我仍然有问题。 "HALLÖ" 例如。因为浏览器在发送之前仍然会翻译成 UTF-8:

        let data = $('#customerForm').serialize();
        let url = "http://192.168.200.1:7080/cics/CWBA/mypgm";

        data = data + '&action=save&segment=cusadr&lfnr=01';

        $.ajax({
          type: "POST",
          url: url,
          data: data,
          contentType: "application/x-www-form-urlencoded",
          success: function(data) {
            console.log(data);

            if (resp.code != "0000") {
              app.$data.errorMsg = resp.data;
            }
          }
        });

如何在 ISO-8859-1 中实现 post?

我知道这个问题是 2 年前发布的,但似乎没有人跟进以记录直接、简单的答案。所以这就是答案....

巧合的是,就在 Andi S. 发布这个问题的同一天,IBM 公开宣布了 z/VSE 6.2。 z/VSE 6.2 及其随附的 CICS 事务服务器版本(版本 2.2)于 2017 年 12 月 1 日普遍可用。 z/VSE 的 CICS 事务服务器版本 2.2 添加了对 CICS 通道的 UTF-8 和 UTF-16 支持和容器 API。 z/VSE SOAP 引擎和新的 z/VSE REST 引擎继承了这种支持。不再需要任何中间转换步骤。

虽然 z/VSE 6.1 已于 2019 年 6 月 30 日达到 IBM 的(标准)支持终止,但对于那些仍在 运行 先前版本 z/VSE 和 CICS 的人来说还没有准备好将所有内容移动到最新版本,可以将 运行 CICS Transaction Server Version 2.2 for z/VSE 与先前版本一起使用并将它们连接起来。可能最简单的方法是拥有一对 LPAR(或 z/VM 来宾),一个 运行 最新的 CICS 版本,支持 UTF-8 和 UTF-16 作为 "gateway," 和另一个相互关联的旧版本 运行ning CICS 应用程序。然后您可以尽快将程序转移到新的、更新的 LPAR 或 z/VM 来宾,但您不必等待旧版本环境完全升级以支持 UTF-8 和UTF-16 互操作性。

即使您仍在 运行宁 z/VSE 早于 z/VSE 6.1 的版本,如果您需要,这种 "mixed CICS release" 方法应该可以正常工作。 (只要您使用 both/all CICS 环境支持的 "lowest common denominator" 互连选项之一,CICS 在版本之间甚至平台之间都没有特别的互连限制。)请注意,IBM 结束了 "Single Version Charge" 2017 年初的限制。当然,请与 IBM 仔细核实,但是 运行 两个或更多版本的 z/VSE 和 CICS 应该不会额外收费,无论您需要多长时间,直到您的程序升级到最新版本。