【发布时间】: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 字符是否可以用作搜索字符串。
【问题讨论】: