VM正在使用latin1的本机名编码运行,这可能会导致Elixir出现故障,因为它需要utf8

Rus*_*nov 22 ubuntu encoding utf-8 virtual-machine elixir

每次执行Elixir代码或输入时,如何解决此警告iex

警告:VM正在使用latin1的本机名编码运行,这可能会导致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
Run Code Online (Sandbox Code Playgroud)

Rus*_*nov 15

LC_ALL=我检查过显然没有问题

$ cat /etc/default/locale
LANG="en_US.utf8"
LANGUAGE="en_US:"
Run Code Online (Sandbox Code Playgroud)

确保LC_ALL缺失,修复它,我执行:

$ sudo update-locale LC_ALL=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

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

$ cat /etc/default/locale
LANG="en_US.utf8"
LANGUAGE="en_US:"
LC_ALL=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

并且错误消失了.

  • 有趣的部分在这里:[erl_sys_common_misc.c](https://github.com/erlang/otp/blob/a2670f0822fc6729df956c8ec8c381340ff0a5fb/erts/emulator/sys/common/erl_sys_common_misc.c) (3认同)

nic*_*oga 7

我在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
Run Code Online (Sandbox Code Playgroud)


vee*_*vee 6

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

ENV LANG=C.UTF-8
Run Code Online (Sandbox Code Playgroud)


Chr*_*idt 5

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

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

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


rad*_*tek 5

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

localedef -c -f UTF-8 -i en_US en_US.UTF-8
export LC_ALL=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

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