使用搜索时不正确处理重音字符(在 Moqui 的 PopCommerce 中)

Incorrect handling accented characters when using search (in Moqui's PopCommerce)

我的数据库是 Postgresql 9.3 上的 运行,应用程序本身是 Apache Tomcat 8.5.3 上的 运行。涉及的应用是PopCommerce。

数据库使用UTF8编码:


   Name    |  Owner   | Encoding  | Collate | Ctype |   Access privileges
-----------+----------+-----------+---------+-------+------------------------
 moquidb   | postgres | UTF8      | C       | C     | 

我没有更改任何服务器上的默认设置(关于语言环境),既没有更改数据库服务器,也没有更改 Apache。

当前的应用程序行为令人困惑。我导入了我客户的供应商列表 (mantle.party.Party + mantle.party.Organization),全部使用带有重音字符的斯洛伐克语 - á、š、č、ž 等。一切似乎都很好,直到我开始使用搜索FindSupplier 屏幕(以及其他地方)。

假设我想找到 organizationName 以字母“Hús”开头的供应商。在我将字符串 'Hús' 写入 Name 文本查找(输入框)并点击 Find 按钮,新屏幕呈现 Name 框中的错误文本 - 'Hãºs'。字母“ú”被替换为“ú”。当然没有搜索结果。

设置数据库和应用程序服务器以支持重音字符的正确方法是什么?

开发时,运行 Moqui 在我的带有嵌入式数据库的笔记本上,没有发生过这样的事情。我怀疑应该更改服务器上的设置。任何帮助表示赞赏。

希望这对面临类似问题的任何人有所帮助。就我而言,这些步骤帮助了我。我能够确定的第一件事是 Tomcat 服务器导致了该行为。当我 运行 Moqui 在它的 servlet(独立模式)中针对同一个数据库时,问题没有发生。

所以我修改了 Tomcat 的配置以确保通信(特别是服务器的响应)使用 UTF-8 编码:

  1. 在 server.xml (conf/server.xml) 中的连接器标记上设置 URIEncoding="UTF-8" -> 只需向现有配置添加一个属性,
  2. 打开 setCharacterEncodingFilter - 编辑 web.xml (conf/web.xml),有一个注释标签(在 Tomcat 的 8.5 版本中它在第 465 行附近)在 web.xml。检查 Whosebug 上其他线程中描述的配置(转到下面的第二个 link 了解更多详细信息)。

这些是我的来源:

https://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q3

Tomcat 7 org.apache.catalina.filters.AddDefaultCharsetFilter not using UTF-8