![Unicodeコードポイント[0-9A-F]をbashから印刷可能な文字に変換するには?](https://linux33.com/image/1516/Unicode%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88%5B0-9A-F%5D%E3%82%92bash%E3%81%8B%E3%82%89%E5%8D%B0%E5%88%B7%E5%8F%AF%E8%83%BD%E3%81%AA%E6%96%87%E5%AD%97%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F.png)
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"}
λ