ChatGPT解决这个技术问题 Extra ChatGPT

How to fix a locale setting warning from Perl

When I run perl, I get the warning:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

How do I fix it?

What happened when you checked the locale settings like the error message told you?
instead of installing the locale, you can also change the locale. On my Ubuntu box, this is done for one user by editing ~/.pam_environment
On my ODROID-C1 running Ubuntu the issue was indeed the ~/.pam_environment file. Some of the variables were es_US.UTF-8 instead of en_US.UTF-8. Thank you.
I got this on Cygwin\Babun. Only a reinstall of perl fixed it.

P
Peter Mortensen

Here is how to solve it on Mac OS X v10.7 (Lion) or Cygwin (Windows 10):

Add the following lines to your bashrc or bash_profile file on the host machine:

# Setting for the new UTF-8 terminal support in Lion
export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

If you are using Z shell (zsh), edit file zshrc:

# Setting for the new UTF-8 terminal support in Lion
LC_CTYPE=en_US.UTF-8
LC_ALL=en_US.UTF-8

Thanks, I've search a solution for this problem for a long time, and I always thought it's a problem in my Ubuntu server configuration, and it seemed that there was no solution that helped (all that dkpg-reconfigure stuff(
Because LC_ALL overwrites all other variables, I’d rather set LANG=de_AT.UTF-8 and individual variables like LC_MESSAGES=en_US.UTF-8. If a variable is not set it falls back to LANG. You can also eg. unset LC_CTYPE to force it fall back to LANG.
Placing those lines in .bashrc didn't work, but bash_profile solved it! I had to create the file.
Putting these lines in ~/.bashrc solved it for me... then must reload using source ~/.bashrc... Thnks <3
Thanks, this worked fine on ZSH and the oh-my-zsh plugin under Mac OS X El Capitan, at the bottom of ~/.zshrc : LC_CTYPE=en_US.UTF-8 LC_ALL=en_US.UTF-8
P
Peter Mortensen

Your OS doesn't know about en_US.UTF-8.

You didn't mention a specific platform, but I can reproduce your problem:

% uname -a
OSF1 hunter2 V5.1 2650 alpha
% perl -e exit
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LC_ALL = (unset),
    LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

My guess is you used ssh to connect to this older host from a newer desktop machine. It's common for /etc/ssh/sshd_config to contain

AcceptEnv LANG LC_*

which allows clients to propagate the values of those environment variables into new sessions.

The warning gives you a hint about how to squelch it if you don't require the full-up locale:

% env LANG=C perl -e exit
%

or with Bash:

$ LANG=C perl -e exit
$

For a permanent fix, choose one of

On the older host, set the LANG environment variable in your shell's initialization file. Modify your environment on the client side, e.g., rather than ssh hunter2, use the command LANG=C ssh hunter2. If you have administrator rights, stop ssh from sending the environment variables by commenting out the SendEnv LANG LC_* line in the local /etc/ssh/ssh_config file. (Thanks to this answer. See Bug 1285 for OpenSSH for more.)


Thanks! I had this error message when connecting with git to my server. After adding de_CH.UTF-8 (was not supported there but used locally) with dpkg-reconfigure locales the message is gone.
I had this issue for ages,... removing "AcceptEnv LANG LC_*" from sshd_config finally resolved it. Thanks for the hint!
@Greg Bacon, Wouldn't there also be cases in which you would want to set the environment variables system wide, for example by creating an /etc/environment file? help.ubuntu.com/community/…
@HermannIngjaldsson, at least on Ubuntu (12.10), there was no need to reboot the server (after removing "AcceptEnv LANG LC_*"). I just reloaded ssh config: service ssh reload, which takes a fraction of a second, and doesn't even cause the current ssh session to terminate.
append 'export LC_ALL=C' then 'source ~/.bashrc' at client system solve the problem.
k
kritzikratzi

If you are creating a rootfs using debootstrap you will need to generate the locales. You can do this by running:

# (optional) enable missing locales
sudo nano /etc/locale.gen

# then regenerate
sudo locale-gen

This tip comes from, https://help.ubuntu.com/community/Xen


locale-gen does not take any arguments (in Debian stable at least). Instead, edit /etc/locale.gen to uncomment the locales you want, then run sudo locale-gen
On Debian you may need to do $ echo en_US UTF-8 >> /etc/locale.gen first.
On Gentoo (at least), locale-gen does not take arguments. It reads from /etc/locale.gen.
some distributions don't use a configuration file and need the following, sudo locale-gen en_US.UTF-8
@akhmed You should only need to uncomment the line # en_US.UTF-8 UTF-8.
m
mehov

Use:

export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_CTYPE=en_US.UTF-8

It works for Debian. I don't know why - but locale-gen had not results.

Important! It's a temporary solution. It has to be run for each session.


This one worked for me. I just put it into my .bashrc file.
Worked for me too. I only had to set the two settings (LANGUAGE and LC_ALL) that appeared unset in the Perl warnings
On Debian, local-gen only processes locales that are uncommented in /etc/local.gen. You may need to do echo en_US UTF-8 >> /etc/locale.gen first.
LC_CTYPE may be?
should be LC_CTYPE
S
Sinan Ünür

This generally means you haven't properly set up locales on your Linux box.

On Debian or Ubuntu, that means you need to do

$ sudo locale-gen
$ sudo dpkg-reconfigure locales

See also man locale-gen.


does not fix the issue here
dpkg-reconfigure locales - fixed the issue for me, debian 7.1
dpkg-reconfigure locales fails itself with the same perl locale error messages that one is trying to fix in the first place!!!!
This worked for me in Ubuntu 14.04, although I had to add the missing locale first with sudo locale-gen es_UY.UTF-8
@matteo Only the first time, before it fixes the error. Try again, and it should be fixed.
C
Community

For macOS & Mac OS X users only

I was getting the same warning while using Git

To resolve this warning Uncheck the Set locale environment variable on startup option and restart your terminal. Below screen shot represents my terminal settings.

https://i.stack.imgur.com/y5nUH.png


I tried all the others but this one did it for me. I use iTerm and it has the same character encoding option.
Unfortunately this breaks ZSH (tabbing stopped working)
This totally does the trick for Mac OS. By the way, this starting happening to me right after upgraded to macOS Sierra. And this did fix this issue for me.
this fixed my problem. it started to happen to me, after updating to Mac OS X High Sierra from Sierra.
Yup. I use iTerm. Wiping problem Mac system settings fixed some Mac crashes, but caused this issue when running Perl on my long-stable CentOS server, connected via Mac / iTerm. Disabling the automatic locale set on connect fixed it. iTerm -> Preferences ->Profiles->Terminal->Environment->Set locale variables automatically. Uncheck this, and restart iTerm.
P
Peter Mortensen

It is simple fix in Ubuntu. You have to generate the Locales from scratch, running the following commands from the command line:

sudo locale-gen en_US en_US.UTF-8
sudo dpkg-reconfigure locales

This should create the locales and then re-configure them.


This worked fine to me even using pt_BR pt_BR.UTF-8 - Thanks.
m
mehov

Adding the following to /etc/environment fixed the problem for me on Debian and Ubuntu (of course, modify to match the locale you want to use):

LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8

.. I got a warning saying setting locale in /etc/environment is deprecated and should instead be set in /etc/default/locale. Both seems to work for now.
should be LC_CTYPE
w
warvariuc

I am now using this:

$ cat /etc/environment
...
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8

Then log out of SSH session and log in again.

Old answer:

Only this helped me:

$ locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=ru_RU.UTF-8
LC_TIME=ru_RU.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=ru_RU.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=ru_RU.UTF-8
LC_NAME=ru_RU.UTF-8
LC_ADDRESS=ru_RU.UTF-8
LC_TELEPHONE=ru_RU.UTF-8
LC_MEASUREMENT=ru_RU.UTF-8
LC_IDENTIFICATION=ru_RU.UTF-8
LC_ALL=

$ sudo su

# export LANGUAGE=en_US.UTF-8
# export LANG=en_US.UTF-8
# export LC_ALL=en_US.UTF-8

# locale-gen en_US.UTF-8
Generating locales...
  en_US.UTF-8... up-to-date
Generation complete.

# dpkg-reconfigure locales
Generating locales...
  en_AG.UTF-8... done
  en_AU.UTF-8... done
  en_BW.UTF-8... done
  en_CA.UTF-8... done
  en_DK.UTF-8... done
  en_GB.UTF-8... done
  en_HK.UTF-8... done
  en_IE.UTF-8... done
  en_IN.UTF-8... done
  en_NG.UTF-8... done
  en_NZ.UTF-8... done
  en_PH.UTF-8... done
  en_SG.UTF-8... done
  en_US.UTF-8... up-to-date
  en_ZA.UTF-8... done
  en_ZM.UTF-8... done
  en_ZW.UTF-8... done
Generation complete.

# exit

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

This worked fine for me on Ubuntu 15.04, thanks a lot.
P
Peter Mortensen

On Debian, after much searching, this did the trick.

First:

sudo apt-get purge locales

Then:

sudo aptitude install locales

And the famous:

sudo dpkg-reconfigure locales

This rids the system of locales, then re-installs locales and downgrades libc6 from 2.19 to 2.13 which is the issue. Then it configures locales again.


dpkg-reconfigure locales is all that is needed. sudo if you are a sudo type guy, or do it as root. Then select your locale according to what you have in your shell environment.
dpkg-reconfigure locales SHOULD be all that is needed. After you have tried that 100 times and looked around the internet and that's all you've seen and the problem still won't resolve itself try the above. Then come back and upvote this. :)
P
Peter Mortensen

We will set locales that are not unset after reboot.

First open the Bash file and edit it:

nano .bashrc

Add these lines to the file:

export LC_ALL="en_US.UTF-8"
export LANG="en_US.UTF-8"
export LANGUAGE="en_US.UTF-8"

Activate the change by reloading Bash:

source ~/.bashrc

Test results:

locale

The only one that works for me, Raspbian and ubuntu server 16.04 :)
P
Peter Mortensen

For Ubuntu use this,

#export LANGUAGE=en_US.UTF-8
#export LC_ALL=en_US.UTF-8
#export LANG=en_US.UTF-8
#export LC_TYPE=en_US.UTF-8

It worked for me.


It also worked for me, by removing all content in file /etc/default/locale and putting only the definition of the vars (removing the word export) and restarting the server
... and not for me. "worked for you" generally is not a good enough criterion. I suggest trying what I post below
P
Peter Mortensen

If you use Mac OS X v10.10 (Yosemite) or above to connect in your server Linux, you can try these steps.

Keep your file /etc/ssh/sshd-config original Put on your ~/.bash_profile export LANG="en_US" export LC_ALL=$LANG.UTF-8 Run dpkg-reconfigure locales And select "en_US.UTF-8"


P
Peter Mortensen

For Debian users, I have this problem after modifying my locale to change machine's language. This is what I did:

Modify .bashrc: export LANG=fr_FR.UTF-8 export LC_ALL=fr_FR.UTF-8 Uncomment line fr_FR.UTF-8 in file etc/locale.gen -> sudo locale-gen to generate the missing package sudo update-locale sudo dpkg-reconfigure locales to configure my locale to fr_FR.UTF-8 Add extra lines to the etc/default/locale file: LANGUAGE=en_US.UTF-8 LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 LC_TYPE=en_US.UTF-8 Reboot my computer and everything works fine


Sometimes 5. is the only thing that works. Still kinda puzzled by this behaviour.
g
glarrain

You need to configure locale appropriately in /etc/default/locale, logout, login, and then run the regular commands

root@host:~# echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale
root@host:~# exit
local-user@local:~$ ssh root@host
root@host:~# locale-gen en_US.UTF-8
root@host:~# dpkg-reconfigure locales

these steps worked for me (Ubuntu server 14.04). the main point was to logout and login again.
b
bogdanvlviv
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory

Solution:

Try this (uk_UA.UTF-8 is my current locale. Write your locale, for example en_US.UTF-8 !)

sudo locale-gen uk_UA.UTF-8

and this.

sudo dpkg-reconfigure locales

Thank you this solved my problem, after doing this and reinstalling.
P
Peter Mortensen
sudo nano /etc/locale.gen

Uncomment the locales you want to use (e.g. en_US.UTF-8 UTF-8):

Then run:

sudo /usr/sbin/locale-gen

Source: Configuring Locales


The company I work for in USA hosts a git server that has international customers. The GB crowd complained that their git clones over ssh would have problems due to locale differences. This applied on the server fixed this issue for them.
P
Peter Mortensen

For me, I fixed this error by editing the .bashrc file, adding exports. Add after the initial comments.

Add language support.

export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_TYPE=en_US.UTF-8

Using LC_ALL shouldn't be necessary as it is meant for use during debugging. LC_ALL overrides all locale settings.
N
Nuvanda

Adding the correct locale to ~/.bashrc, ~/.bash_profile, /etc/environment and the like will solve the problem, however it is not recommended, as it overrides the settings from /etc/default/locale, which is confusing at best and may lead to the locales not being applied consistently at worst.

Instead, one should edit /etc/default/locale directly, which may look something like this:

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE=en_US

The change will take effect the next time you log in. You can get the new locale in an existing shell by sourcing /etc/default/locale like this:

$ . /etc/default/locale

need to restart system after this step
You can simply comment in the desired locale in "/etc/locale.gen" then run: locale-gen
P
Peter Mortensen

For anyone connecting to DigitalOcean or some other Cloud hosting provider from the iTerm2.app on macOS v10.13 (High Sierra) and getting this error on some commands:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = "en_US.UTF-8"
  are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").

This fixed the problem for me:

https://i.stack.imgur.com/Yvtj6.png


Yup was this setting in iterm2! Thanks!
P
Peter Mortensen

Add missing locales to file .bash_profile:

echo "export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8">>~/.bash_profile

Then source your .bash_profile file:

source ~/.bash_profile

D
David Morales

For Ubuntu Server and Debian:

No need to create exports in bashrc or dealing with dpkg-reconfigure.

Just replace the contents of /etc/default/locale with:

LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8

P
Peter Mortensen

Following the accepted answer:

LANG=C ssh hunter2.

LC_ALL=C ssh hunter2

on the client side did the trick for me.


Worked for me on OSX 10.10.3, while only "LANG=C" was not enough. Thanks Alex!
R
Rip3rs

With zsh ohmyzsh I added this to the .zshrc:

 # You may need to manually set your language environment
 LANGUAGE=en_US.UTF-8
 LANG=en_US.UTF-8
 LC_CTYPE=en_US.UTF-8
 LC_ALL=en_US.UTF-8

By removing the line export LANG=en_US.UTF-8

Reopened a new tab and SSHed in, worked for me :)


What is "zsh ohmyzsh"?
ZSH is a different type of terminal, from the standard one. Oh. My ZSH is meant to improve that same terminal. from website: Oh My Zsh is a delightful, open source, community-driven framework for managing your Zsh configuration. It comes bundled with thousands of helpful functions, helpers, plugins, themes, and a few things that make you shout... ohmyz.sh
C
Canberk Sinangil

Debian GNU/Linux 11 (bullseye)

I encountered this issue after creating a brand new VM instance in GCP.

Basically, I have just run the following

$ sudo apt-get update
$ sudo apt-get upgrade

Here I have got the error

https://i.stack.imgur.com/92aEv.png

perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LC_TERMINAL = "iTerm2",
LANG = "C"
are supported and installed on your system.

Here is how I fixed it.

Install the locales first.

$ sudo apt-get install locales

Open the locale file (use your favorite editor).

$ sudo nano /etc/default/locale

Add the following and save it.

LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8

Run the following.

$ sudo localedef -i en_US -f UTF-8 en_US.UTF-8

Restart your terminal.

Run the command to test and close it via ctrl + d.

$ perl

Note: I created an instance to just test my solution in order to ensure. Please let me know if it doesn't work for you.

https://i.stack.imgur.com/cycYN.png

I hope it helps you.


P
Peter Mortensen

Add LC_ALL="en_GB.utf8" to /etc/environment and reboot. That's all.


S
Surender

Export the variable

$ export LANGUAGE=en_US.UTF-8
$ export LC_ALL=en_US.UTF-8
$ export LANG=en_US.UTF-8
$ export LC_CTYPE=en_US.UTF-8

Next run

$ sudo locale-gen
$ sudo dpkg-reconfigure locales 

When you run dpkg-reconfigure locales it asks you to choose the locales, choose en_US.UTF-8 . If you run this by selecting all locales, it will take some time to configure.


P
Peter Mortensen

In my case, with Debian 8.6 (Jessie), I had to change settings in:

/etc/ssh/ssh_config` for `#AcceptEnv LANG LC_*

and

sshd_config for #SendEnv LANG LC_*

Then restart the ssh service.

At last, I did:

locale-gen en_US.UTF-8 and dpkg-reconfigure locales


P
Peter Mortensen

Source of the problem

I experienced this, logging in from one machine to another via ssh. The remote machine didn’t have the locale files, that I had on my local machine. You can either disable the forwarding of the locale from your local machine to the remote machine (in the file /etc/ssh/sshd_config remove the line AcceptEnv LANG LC_CTYPE …) or install the locale (changing it is not necessary in this case).

Installing

On Fedora, Red Hat Linux, and CentOS I used

sudo dnf install langpacks-de

for the German (de) language packs. I logged out, in, and it worked.

Search for other langpacks with

dnf search langpacks-

Changing/Activating

To list available locales I used

localectl list-locales

And to set a new one

sudo localectl set-locale de_DE.utf8

P
Peter Mortensen

As always, the devil is in the detail...

On Mac OS X v10.7.5 (Lion), to fix some Django error, in my ~/.bash_profile I've set:

export LANG=en_EN.UTF-8
export LC_COLLATE=$LANG
export LC_CTYPE=$LANG
export LC_MESSAGES=$LANG
export LC_MONETARY=$LANG
export LC_NUMERIC=$LANG
export LC_TIME=$LANG
export LC_ALL=$LANG

And in turn for a long time I got that warning when using Perl.

My bad! As I've realized much later, my system is en_US.UTF-8! I fixed it simply by changing from

export LANG=en_EN.UTF-8

to

export LANG=en_US.UTF-8

关注公众号,不定期副业成功案例分享
Follow WeChat

Success story sharing

Want to stay one step ahead of the latest teleworks?

Subscribe Now