首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticsearch显示umlauts为"??“

Elasticsearch显示umlauts为"??“
EN

Stack Overflow用户
提问于 2013-10-13 00:58:10
回答 1查看 777关注 0票数 0

设置:

  • 通过VMWare快速安装安装Ubuntu12.04服务器
  • PostgreSQL 9.1
  • ElasticSearch 0.90
  • 单3.2.1
  • Rails 4
  • Nginx 1.4.2 +乘客4.0.16

我有一个C#程序,它在开始时编写一个新的ElasticSearch索引,并将rails应用程序使用的别名指向它,然后该程序继续运行,并监视一个redis实例,以便进行更新。

还有另一个C#程序,它从网页中抓取数据,一旦将它们放到Postgresql中,上面的索引编写器就会通过Redis通知。这些页面有不同的编码,并转换为UTF-8。

这个bug的第一次出现是当我犯了一个错误,并将已经被UTF-8编码的数据再次编码为UTF-8。

Investigation

现在我认为我显然有一些数据损坏,但奇怪的是:只有当我通过nohup从rails启动索引单进程时,umlauts才会损坏,如果我杀死这个进程并从命令行手动启动它,它就会运行得很好。

当我对数据库进行备份/还原时,它会从web接口再次工作,但是一旦服务器被重新启动,就会再次用?替换??当从web界面启动单进程时。

我做的第一件事是从数据库中清除受影响的行并再次刮除数据(不对其进行两次编码),这并没有帮助,而且由于错误仅在rails应用程序中以非交互式的形式运行时才出现,因此我认为这是由于区域设置的原因,所以我在/etc/defaults/locale和/etc/环境中都将其更改为en_US.UTF-8和en_US:en,但这也没有帮助。

我真的不知道我还能做些什么,也不知道是什么导致了这一错误,任何帮助都将不胜感激。

编辑:我忘了澄清最重要的部分,当umlauts被替换为?时,在索引中的每个文档中都替换了所有的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-13 12:48:10

将其放入用于启动进程的脚本中:

代码语言:javascript
复制
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8

您的脚本只在手动启动时获得UTF-8的原因是这些东西不是系统范围的。我以前在jruby和init.d脚本中遇到过这种情况,解决方案是不依赖默认值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19340737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档