Unicodeコードポイント[0-9A-F]をbashから印刷可能な文字に変換するには?

Unicodeコードポイント[0-9A-F]をbashから印刷可能な文字に変換するには?

Unicodeコードポイントのリストがありますが、これらの16進値をその文字が表す実際の文字に変換する「簡単」な方法がわかりません...

私は聞いた扱いにくいはいecho -e '\u0965'、しかし私は強く打つ4.1。

bashのzshメソッドと同じくらい簡単なことはありますか?

答え1

iconvでGNU coreutilsでbashのechoまたは/bin/echoを使用できます。

echo -ne '\x09\x65' | iconv -f utf-16be

デフォルトでは、 iconv はロケールエンコーディングに変換されます。おそらく、Perlは特定のシェルやechoコマンドに頼るよりも移植性が良いでしょう。私が知っているほとんどのUNIXシステムはPerlを提供し、Windowsポートもいくつかあります。

perl -C -e 'print chr 0x0965'

ほとんどの場合、これを行う必要がある場合は、組み込みのサポート機能を備えたVim / GVimなどのエディタを使用してください。挿入モードでCtrl-Vを押し、uを押してから4つの16進文字を入力します。 U + FFFF以外の文字が必要な場合は、大文字Uを使用して8つの16進文字を入力してください。 Vimは簡単に作成できるカスタムキーマップもサポートしています。一連の文字を別の記号に変換します。たとえば、私はTMを™に、(C)を©に、(R)を®に変換するwwwというキーマップを開発しました。必要な場合に備えて、Klingonのキーマップも持っています。 Emacsにも似たものがあると確信しています。 GVimおよびGNOME端末を含むGTK +アプリケーションを使用している場合は、Control-Shift-uの後に4つの16進文字を入力してUnicode文字を作成できます。 KDE/Qtにも同様のものがあると確信しています。

修正する:Bash 4.2からは、今は組み込み機能のようです。

echo $'\u0965'

修正する:また、最近ではPerlよりもPythonの例を好むかもしれません。これはPython 2と3の両方で動作します。

python -c 'print(u"\u0965")'

答え2

バッシュ 4.2(2011年リリース)echo -e '\u0965'printf '\u0965'およびのprintf %b '\u0965'サポートが追加されましたecho $'\u0965'

http://tiswww.case.edu/php/chet/bash/FAQ:

o   $'...', echo, and printf understand \uXXXX and \UXXXXXXXX escape sequences.

答え3

GNU coreutilsがある場合は、以下を試してくださいprintf

$ printf '\u0965\n'

echoコンソールがUTF-8を使用していてUTF-8エンコーディングがある場合は、次のことができます。

$ echo -e '\xE0\xA5\xA5'

Unicode で UTF-8 16 進数でエンコードされたテーブルはここにあります。http://www.utf8-chartable.de/。さまざまなスクリプト言語を使用して、Unicodeコードポイントを16進数に変換できます。以下はPythonを使った例です。

python -c "print(unichr(int('0965', 16)).encode('utf-8').encode('hex'))"

以下は、引数を正しい16進値に変換するPerlスクリプトです(ここでは不要な括弧がたくさんあります)。

#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Encode;

foreach (@ARGV) {
    say unpack('H*', encode('utf8', chr(hex($_))))
}

例えば、

./uni2utf 0965
e0a5a5

もちろん、PerlまたはPythonがある場合は、それを使用して文字を印刷することもできます。

答え4

Bashバージョン4.2(およびそれ以降のバージョン)でパターン置換を使用します。

${parameter/pattern/string}

ここで述べたようにhttp://steve-parker.org/sh/tips/pattern-substitution/

UNICODE_HEX="U+02211"
printf ${UNICODE_HEX/U+/"\U"}

UNICODE_HEX="U+03BB"
printf ${UNICODE_HEX/U+/"\U"}
λ         

関連情報