使用 UTF-8 字符查询 QuickBook Online

dre*_*ish 3 quickbooks-online

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

SELECT * FROM Customer WHERE FamilyName = 'W?odarski'
Run Code Online (Sandbox Code Playgroud)

我按照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
Run Code Online (Sandbox Code Playgroud)

但是当我提交该请求时,我得到了回复:

<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>
Run Code Online (Sandbox Code Playgroud)

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

我将问题提交给 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 字符用作搜索字符串。

dre*_*ish 5

简短的回答是它不受支持。

我向 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 字符,例如??我可以通过 API 设置并在 UI 中查看。

我回复了:

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

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

昨天他们终于回复了我:

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

所以这是令人愉快的。