ファイル内のすべての文字のUnicodeコードポイントをbashで表示する


10

「右から左」や「ゼロ幅の非結合子」などの非表示の制御文字が多く、通常のスペースとは異なるスペースがあるファイルを処理する必要があり、その処理に問題があります。

ここで、特定のファイルのすべての文字を1文字ずつ表示します(「左から右」と言いたいのですが、残念ながら右から左への言語を扱います)を、Unicodeコードポイントとして、基本的なbashのツール(のようなvilesscat...)。どういうわけか可能ですか?

でファイルを16進数で表示できることはわかっていますがhexdump、コードポイントを再計算する必要があります。私は実際のUnicodeコードポイントを本当に見たいので、それらをグーグルして何が起こっているのかを知ることができます。

編集:私はそれを別のエンコーディングにトランスコードしたくないことを追加します(それが私がオンラインで見つけているものだからです)。ファイルはUTF8であり、問​​題ありません。すべての文字の正確なコードポイントを知りたいだけです。

回答:


5

私は自分でperl one-linerを作成しましたが、それだけで元の文字も印刷されます。(STDINからのファイルを想定しています)

perl -C7 -ne 'for(split(//)){print sprintf("U+%04X", ord)." ".$_."\n"}'

しかし、これよりも良い方法があるはずです。


4

私はいくつかの一般的なスマイリーのコードポイントが必要で、これを思いつきました:

echo -n "😊" |              # -n ignore trailing newline                     \
iconv -f utf8 -t utf32be |  # UTF-32 big-endian happens to be the code point \
xxd -p |                    # -p just give me the plain hex                  \
sed -r 's/^0+/0x/' |        # remove leading 0's, replace with 0x            \
xargs printf 'U+%04X\n'     # pretty print the code point

印刷する

U+1F60A

「SMILING FACE WITH SMILING EYES」のコードポイントです。


2

Neftasの回答に触発されて、これは単一の文字ではなく、文字列で機能する少し単純なソリューションです。

iconv -f utf8 -t utf32le | hexdump -v -e '8/4 "0x%04x " "\n"' | sed -re"s/0x /   /g"
#                                         ^
# The number `8` above determines the number of columns in the output. Modify as needed.

stdinまたはファイルから読み取り、元のテキストをUnicode値とともに表示するBashスクリプトも作成しました。

COLWIDTH=8
SHOWTEXT=true

tmpfile=$(mktemp)
cp "${1:-/dev/stdin}" "$tmpfile"
left=$(set -o pipefail; iconv -f utf8 -t utf32le "$tmpfile" | hexdump -v -e $COLWIDTH'/4 "0x%05x " "\n"' | sed -re"s/0x /   /g")


if [ $? -gt 0 ]; then
    echo "ERROR: Could not convert input" >&2
elif $SHOWTEXT; then
    right=$(tr [:space:] . < "$tmpfile" | sed -re "s/.{$COLWIDTH}/|&|\n/g" | sed -re "s/^.{1,$((COLWIDTH+1))}\$/|&|/g")
    pr -mts" " <(echo "$left") <(echo "$right")
else
    echo "$left"
fi


rm "$tmpfile"

出力例

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