我尝试使用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字符用作搜索字符串。
答案 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循环中比较所有客户的字符。
这太令人愉快了。