「less」コマンドでUTF-8を処理する方法は?


31

私のMac端末では、UTF-8の印刷は一般に機能しますが、less正しく機能しません。

したがって、これは正しく動作します:

$  echo -e '\xe2\x82\xac'   
€

しかし、それをより少なく配管すると、次のようなものが得られます:

$  echo -e '\xe2\x82\xac' | less  
<E2><82><AC>

これはどのように修正できますか?

診断用:

Mac OS 10.6.8を使用しています。より少ないバージョン418、ターミナル2.1.2(273.1)。

私のロケールの出力はこれです:

$ locale
LANG="en_US.UTF-8"
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL="C"

回答:


43

さて、私はいくつかのグーグルで答えを見つけました。どうやら、LESSCHARSETこのように設定する必要があります:

export LESSCHARSET=utf-8

less私のためにうまく動作します。


CentOSでも同じ問題が発生しました。この行はそれを修正しました。
ウィムDeblauwe

9
私にとっては使用していた問題を解決したものをless -r(表示「生」コントロール文字)
waldyrious

これはDebian 8でも機能します、ありがとう!
-lucaferrario

誰かがこの答えを受け入れるべきです!問題を解決します。
lensovet

2
less -r同じことを行いますが、絵文字も正しく処理しますが、そうしexport LESSCHARSET=utf-8ません。
ノアサスマン

6

で一部のUnicode文字を見ることができるがlessless絵文字を表示できない場合はless、より新しいバージョンにアップグレードしてみてください。Mac OS Xでは、バージョン458から481に移行し、問題が修正されました(たとえば、git logコミットメッセージに絵文字を表示できるようになりました)。

homebrewを使用している場合は、を実行して、システムを新しいバージョンに置き換えることができますbrew install homebrew/dupes/less


ありがとう!homebrewの新しいバージョンではbrew install less、アップグレードを取得するだけです。
アレックスシミニアン

2

私のために働く

LANG=
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"

3
LC_CTYPEは重要なものです。ただし、あまり使用しないルールは奇妙です:ロケールからエンコーディングを取得する代わりに、その名前で文字列 "utf-8"(または他のいくつかの可能性)を検索します。他のエンコーディング、またはロケール名がlessの先入観と一致しない場合。
リチャードケトルウェル

1

私はこれをグーグルで調べて、次の環境変数を試してみました。

export LC_ALL=en_US.UTF-8
export LANG=en_us.UTF-8

複数の異なる答えでLC_ALLを見つけると、これが正しいと思います。しかし、唯一の正しい答えではないかもしれません。もちろん、この質問に対するより正しい答えがあるかもしれません。

とにかく、もう少しグーグルで変数の説明を教えてくれました。

LC_ALLこの変数は、すべてのロケールカテゴリの値を決定します。LC_ALL環境変数の値は、LC_(LC_COLLATE、LC_CTYPE、LC_MESSAGES、LC_MONETARY、LC_NUMERIC、LC_TIME)およびLANG環境変数で始まる他の環境変数よりも優先されます。

ソース:http : //pubs.opengroup.org/onlinepubs/007908799/xbd/envvar.html

これがすべてを支配する言語変数だと思うように私を導く:)


lessバージョン番号を投稿してください。
鹿ハンター14年

確かに、458未満(GNU正規表現)
メルビンロース14年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.