我有以下代码检查读取文件的默认编码(我在Linux,ubuntu16 x64上),只是为了测试:
File.read("/bin/ls").encoding如果Apache通过FastCGI调用我的代码,那么输出就是US_ASCII (C语言环境),但是如果我从系统中的任何地方手动运行我的代码,我就会得到en_US.UTF-8编码。
更改/etc/apache2/envvars中的LANG env变量不会产生任何影响。更改/etc/init.d/apache2中的ENV配置也不会(当然是在服务重新启动之后)。/etc/default/locale设置为en_US.UTF-8。在我的conf文件中使用虚拟主机并添加默认字符集也没有任何帮助。
从Apache调用时检查ENV数组几乎是空的(只设置了PATH变量),而手动运行时检查它充满了LANG等变量。因此,这显然是一个环境设置问题。
我在我的项目中使用了一个外部GEM,当它在非unicode环境中运行时有一个bug。我可以手动修补它,但这不是一个好的解决方案,因为更新会覆盖它。
如何让Apache在unicode环境中运行我调用的代码?
发布于 2017-09-25 16:17:36
解决方案是:https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#fcgidinitialenv
edit /etc/apache2/mods-available/fcgid.conf
FcgidInitialEnv LC_ALL en_US.UTF-8
service apache2 restarthttps://stackoverflow.com/questions/46373666
复制相似问题