首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Coldfusion 11与Coldfusion 2016之间的编码问题

Coldfusion 11与Coldfusion 2016之间的编码问题
EN

Stack Overflow用户
提问于 2019-10-11 00:42:08
回答 1查看 112关注 0票数 3

我目前使用ColdFusion 11作为本地服务器进行开发。

我有一个用ColdFusion序列化的JSON字符串。在字符串中,我必须在对象"Payment_form“中插入代码"99”。响应中所需的Api告诉我,Payment_form对象是一个字符串。

了解使用JSON的ColdFusion序列化和数值表示的问题,在这里查看StackOverflow并通过放置"chr(2)“找到解决方案。

问题解决了..。但是只有在ColdFusion 11中。当我将代码上传到ColdFusion主机(hostek.com/ an 2016)时,它就停止工作了,因为chr(2)返回值"/u000299“,因此API响应时会出现错误。

我假设ColdFusion 2016更改了chr()的处理,但是在这两个版本的文档中,这个函数的处理没有改变。

根据ASCII表,CF/2016似乎正在改变(转义Unicode)。

所以呢?有人知道怎么解决这个问题吗?

  • 这与托管服务有关吗?
  • Hostek.com有一个与我的本地服务器不同的编码器?

我希望有人在这方面有一些建议。谢谢

代码语言:javascript
复制
<cfset requestData = {"customer": "#customer#"
        , "items":#empStruct#
        , "payment_form":"#chr(2)#99"
        , "payment_method": "#payment_method#"
        , "use": "#use#"
        , "folio_number": "#folio_number#"
        , "series": "#series#"
    }>

使用Coldfusion 11 (本地服务器My_pc)的Serliaze出口链

代码语言:javascript
复制
 {
  "payment_form": "99",
  "series": "F",
  "use": "G03",
  "customer": "5d965ab97419177948b59a26",
  "payment_method": "PPD",
  "items": [
    {
      "quantity": 2,
      "product": "5d9639d27419177948b59a0b"
    },
    {
      "quantity": 15,
      "product": "5d9639e07419177948b59a0c"
    }
  ],
  "folio_number": 7400
}

用ColdFusion 2016序列化退出链(Cold聚变托管Hostek.com)

代码语言:javascript
复制
 {
  "payment_form": "\\u000299",
  "series": "F",
  "use": "G03",
  "customer": "5d9691f17419177948b59a68",
  "payment_method": "PPD",
  "items": [
    {
      "quantity": 500,
      "product": "5d9d30bc08b8ad3f683e81bc"
    },
    {
      "quantity": 500,
      "product": "5d9d30c908b8ad3f683e81bd"
    }
  ],
  "folio_number": 7840
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-11 03:19:02

TL;DR;

与其尝试“修复修复”,不如使用一个较新的序列化特性代替

代码语言:javascript
复制
input = {"payment_form":"99"};
input.setMetadata( {payment_form: {type: "string"}} );
output = serializeJSON( input );

在开发中使用与Prod不同的版本总是会导致眼泪..。看看CommandBox。它使得使用不同版本的CF非常容易。

chr(2)返回值"/u000299“

不管怎样..。serializeJSON()函数是将chr(2)转换为/u0002的工具。然而,这似乎并不是新的行为。CF 11做同样的事情。与其尝试“修复修复”,不如使用较新的序列化特性之一:

Adobe ColdFusion (2016发布版)更新2使您能够为结构中的键指定数据类型信息。这就是所谓的元数据。

显式地将payment_form值声明为字符串,CF将它用引号括起来,而不是猜测它是一个数字。

输入:

代码语言:javascript
复制
input = {"payment_form":"99"};
input.setMetadata( {payment_form: {type: "string"}} );
output = serializeJSON( input );
writeDump( output );

结果:

代码语言:javascript
复制
{"payment_form":"99"}

另外,如果您是从一个查询对象构建此对象,CF2016添加了两个新的应用程序设置,它们可以覆盖序列化查询的古怪默认设置,从而使生成一个正确大小写的结构数组。变得更加容易。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58332796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档