使用UTF-8字符查询QuickBook Online

时间:2017-03-03 23:28:03

标签: quickbooks-online

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

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

我根据https://developer.intuit.com/hub/blog/2014/03/20/advanced-sql-queries的建议对其进行网址编码并获取:

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字符å的网址编码。

     

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

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

1 个答案:

答案 0 :(得分:3)

简短回答是不支持。

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

  

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

的URL编码      

你也可以这样做:   从Customer中选择*,其中GivenName如'm%na',然后对整个查询进行编码,忽略第二个字符并按顺序搜索其余字符。

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

我回答说:

  

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

     

使用%通配符替换字符的建议很有意思,但会返回其他记录,例如“Mona”或“Mina”。

昨天他们终于回到我身边了:

  

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

这太令人愉快了。