似乎Heroku没有在其虚拟机上明确指定字符编码,因此默认为8位ASCII。 Debian和Ubuntu的其他现代版本将UTF-8指定为默认值,这避免了当语言回退到用于读取输入的操作系统字符编码时的问题。为什么Heroku也不会使用此默认值?
根据其他SO帖子,我发现至少Ruby,SBCL和Haskell application developers已经解决了这个问题,他们建议在操作时明确设置UTF-8通过以下命令避免问题的系统级别:
heroku config:add LANG=en_US.UTF-8
我觉得这是Heroku必须考虑的事情,因为字符编码非常重要。 Heroku是否有充分的理由不将UTF-8指定为操作系统默认值?
答案 0 :(得分:0)
Heroku的支持对回答我的问题非常有帮助。基本上,他们只是将编码留给每种语言的buildpack。此外,他们还为我提供了指向如何在Python和Ruby维护的构建包中实现此功能的链接。
我发现Python脚本特别有助于为Haskell应用程序自动设置编码(我为Haskell buildpack复制了部分内容)。 Here's the PR I created to set UTF-8 as a default in Haskell。您应该在compile script in the buildpack API中的两个位置指定默认字符编码。首先,在编译编译器本身之前导出语言可能是个好主意,就像它们对Python一样。其次(最重要的是为您的应用程序),您应该在.profile.d script中进行设置,以便将其作为应用程序的上下文。
希望这对于为其他语言制作buildpack的人来说是有用的信息!