web-dev-qa-db-ja.com

en_US.utf8とen_US.UTF-8の違いは?

私はzshにDebian Jessieをうまく機能させるのにひどい時間を費やしましたが、私の問題はすべてシステムのロケールに起因しているという結論に達しました。 localeを実行しています。

LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
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=

ただし、/etc/default/localeにはLANG=en_US.UTF-8と同様に/etc/environmentが含まれており、私の/etc/locale.genファイルにはen_US.UTF-8 UTF-8のみコメント化されていません。

  1. なぜlocaleは、システム上の他のすべてのオプションと(微妙に)異なるものを報告するのですか。
  2. localeを実行するときに、LCオプションごとに "en_US.UTF-8"を与えるように構成(修正)するにはどうすればよいですか?
12
Connor Glosser

「適切な」名前は_UTF-8_です。ただし、Linux glibcは、エンコーディング名を小文字に変換してほとんどの特殊文字を削除することにより、エンコーディング名を内部的に正規化するため、両方のバリアントが機能します(BSDシステムにエスケープしない限り)。

ほとんどの場合、$ LANGの_.utf8_サフィックスはGNOMEから来ています。 afaik、これは3.18で修正されました。

ただし、上記のように、_utf8_と_UTF-8_はLinux glibcでも同じように機能します。問題は他の場所から発生します。あなたが問題を書いていないのでis、ここに一般的なチェックリストがあります:

  • _locale -a_(利用可能なロケール)はどちらのバリアントも表示しますかまったく?つまり生成(_locale-gen_を使用)locale.genを編集した後のロケールはありますか?

  • ターミナルエミュレータ環境のロケール設定は同じですか? cat /proc/$(pidof xterm)/environ | tr \\0 \\nを使用して、別のプロセスの環境を確認します。

    (多くの場合、人々は_~/.bashrc_または同様のファイルからロケール環境変数を設定しようとしますが、環境変数は「上方」に伝搬しないため、最終結果になります。)

  • _printf '\xe2\x99\xa5'_は何を出力しますか? oneボックスまたは疑問符が表示されている場合、フォントに必要な文字がないことを意味します。 threeガベージ文字が表示される場合は、端末に適切な$ LANGがない(またはUTF-8をサポートしていない)ことを意味します。

13
user1686