虚拟机以拉丁语1的本机名称编码运行,这可能会导致Elixir出现故障,因为它需要UTF8



如何解决每次执行Elixir代码或输入iex时提示的警告?

警告:虚拟机正在使用拉丁语1的本机名称编码运行,这可能会导致Elixir出现故障,因为它需要UTF8。请确保您的语言环境设置为 UTF-8(可以通过在 shell 中运行"locale"来验证(

$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.utf8
LANGUAGE=en_US:
LC_CTYPE=UTF-8
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04 LTS
Release:        14.04
Codename:       trusty

显然未设置LC_ALL=是问题所在,我检查了

$ cat /etc/default/locale
LANG="en_US.utf8"
LANGUAGE="en_US:"

确保缺少LC_ALL为了修复它,我执行了:

$ sudo update-locale LC_ALL=en_US.UTF-8

此命令将LC_ALL添加到/etc/default/locale文件中:

$ cat /etc/default/locale
LANG="en_US.utf8"
LANGUAGE="en_US:"
LC_ALL=en_US.UTF-8

错误消失了。

我在 docker 容器中使用 erlang,而其他解决方案没有削减它。命令update-locale可能在 docker ubuntu 容器中不可用,所以我从 https://hub.docker.com/r/voidlock/erlang/~/dockerfile/中窃取了一些安装它的代码。

apt-get update && apt-get install -y --no-install-recommends locales
export LANG=en_US.UTF-8 
    && echo $LANG UTF-8 > /etc/locale.gen 
    && locale-gen 
    && update-locale LANG=$LANG

我在使用 docker 映像时遇到了这个问题。将以下行添加到我的Dockerfile解决了这个问题:

ENV LANG=C.UTF-8

当您从 Mac 笔记本电脑通过 SSH 连接到 Linux 服务器(包括笔记本电脑上运行的虚拟 Linux 服务器(时,就会发生这种情况。SSH 将LANGLC_*环境变量从本地外壳转发到远程外壳,Mac 上使用的某些值在 Linux 服务器上无效。

可以通过多种方式修复此问题,包括在服务器上安装缺少的区域设置。我建议简单地在服务器(/etc/ssh/sshd_config中删除AcceptEnv(或笔记本电脑(/etc/ssh/ssh_config中删除SendEnv(上禁用SSH环境转发。

阅读更多 如何修复来自 Perl 的区域设置警告?

在 centOS 7 上,以下内容对我有用:

localedef -c -f UTF-8 -i en_US en_US.UTF-8
export LC_ALL=en_US.UTF-8

应该适用于大多数(如果不是全部(RHEL 发行版。干杯!

在 nix-shell 中,这个命令帮助了我:

export LOCALE_ARCHIVE=/usr/lib/locale/locale-archive

参考: https://nixos.wiki/wiki/Locales

对我来说,

在我的初始化脚本中设置语言环境/etc/init/my_start_script.conf做到

env LC_ALL=en_US.UTF-8 
export LC_ALL
sudo dpkg-reconfigure locales

在 Ubuntu 18.04.5 LTS 上做到了!

最新更新