【问题标题】:Query QuickBook Online with UTF-8 characters使用 UTF-8 字符查询 QuickBook Online
【发布时间】:2017-03-03 23:28:02
【问题描述】:

我正在尝试使用 API 按名称查询客户。带有非 ASCII 字符的名称(例如 민준 或 Włodarski)会导致查询失败。这是一个示例查询:

SELECT * FROM Customer WHERE FamilyName = 'Włodarski'

我按照https://developer.intuit.com/hub/blog/2014/03/20/advanced-sql-queries 的建议对其进行 URL 编码并得到:

https://sandbox-quickbooks.api.intuit.com/v3/company/193514472385819/query?query=SELECT%20*%20FROM%20Customer%20WHERE%20LastName%20=%20'W%C5%82odarski'%20STARTPOSITION%201%20MAXRESULTS%201000

但是当我提交该请求时,我会返回:

<IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2017-03-03T15:14:26.774-08:00">
  <Fault type="ValidationFault">
    <Error code="4000">
      <Message>Error parsing query</Message>
      <Detail>QueryParserError: Invalid content. Lexical error at line 1, column 43.  Encountered: "\u0142" (322), after : "\'W"</Detail>
    </Error>
  </Fault>
</IntuitResponse>

我需要做什么才能找到这个客户?

我会将问题提交给 Intuit 的支持人员,并提供以下信息:

如果要查询整个字符串,可以对整个查询进行 URL 编码而不使用非 ASCII 字符,然后将 URL 编码字符添加到此查询中。这方面的一个例子是: select%20%2A%20from%20Customer%20where%20GivenName%3D%27m%C3%A5na

select * from Customer where GivenName='måna'

%C3%A5 是我的非 ascii 字符 å 的 URL 编码。

你也可以这样做: select * from Customer where GivenName like 'm%na' 然后对整个查询进行编码,这将忽略第二个字符并按该顺序搜索其余字符。

我认为他们使用å 提供的示例之所以被选中,是因为它是扩展 ASCII 字符集的一部分。我已经要求他们澄清 UTF-8 字符是否可以用作搜索字符串。

【问题讨论】:

    标签: quickbooks-online


    【解决方案1】:

    简短的回答是不支持。

    我向 Intuit 的支持提交了一个问题,这是他们的初步回复。

    如果要查询整个字符串,可以对整个查询进行 URL 编码而不使用非 ASCII 字符,然后将 URL 编码字符添加到此查询中。这方面的一个例子是: 选择%20%2A%20from%20Customer%20where%20GivenName%3D%27m%C3%A5na select * from Customer where GivenName='måna' %C3%A5 是我的非 ascii 字符 å 的 URL 编码。

    你也可以这样做: select * from Customer where GivenName like 'm%na' 然后对整个查询进行编码,这将忽略第二个字符并按该顺序搜索其余字符。

    做了一些测试。仔细看,他们选择的示例似乎有效,因为它是扩展的 ASCII 字符。我要求澄清如何处理像 민준 这样的 UTF-8 字符,我可以通过 API 设置这些字符并在 UI 中查看。

    我会回复:

    我能够复制您建议的“å”字符,但它看起来像是扩展 ASCII 集的一部分,因此编码方式不同。您能否提供一个带有 UTF-8 字符的示例,例如我的初始查询中的字符?或者也许是“민준”?我能够在 XML 和 API 中提交这些值,但无法查询它们。

    用 % 通配符替换字符的建议很有趣,但会返回额外的记录,例如“Mona”或“Mina”。

    昨天他们终于回复了我:

    您好 Andrew,我们不支持使用这些字符的查询。您必须在最后进行编码,然后在 for 循环中为所有客户比较字符。

    所以这很令人愉快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-08
      • 1970-01-01
      • 2015-02-23
      相关资源
      最近更新 更多