设置:
我有一个C#程序,开始时会写一个新的ElasticSearch索引,并将rails应用程序使用的别名指向它,然后该程序继续运行并监视redis实例以更新事物。
还有另一个C#程序会从网页上抓取数据,一旦抓取到的数据就会被放入Postgresql中,并且上面的索引编写器会通过Redis进行通知。这些页面具有不同的编码,并被转换为UTF-8。
该错误的初次出现是当我犯了一个错误,并将已经是UTF-8的数据再次编码为UTF-8时。
调查
现在我以为我显然正在发生一些数据损坏,但是奇怪的是:如果我杀死了该进程并从命令行手动启动,则只有在我通过nohup从rails启动indexing mono进程时,变音才损坏。很好。
当我对数据库进行备份/还原时,它可以从Web界面再次工作,但是一旦服务器重新启动,变音符将再次替换为??。从Web界面启动单声道进程时。
我要做的第一件事是从数据库中清除受影响的行,然后再次刮取数据(没有对其进行两次编码),这没有帮助,因为错误仅在通过Rails应用程序中的nohup以非交互方式运行时才出现我以为是因为语言环境设置,所以我在/ etc / defaults / locale和/ etc / environment中都将其更改为en_US.UTF-8和en_US:en,但这都没有帮助。
我真的不知道我还能做些什么或究竟是什么导致了此错误,所以不胜感激。
编辑:当变音符号替换为??时,我忘了澄清最重要的部分 索引中的每个文档都会替换所有变音符号。
将其放在用于启动过程的脚本中:
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
脚本在您手动启动时仅选择UTF-8的原因是,这些内容不是系统范围的。我以前用jruby和init.d脚本遇到过这种情况,解决方案是不依赖于默认值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句