Bash dosyasındaki tüm harfler için unicode kod noktalarını görüntüleme


11

"Sağdan sola" veya "sıfır genişlikli marangoz olmayan" gibi çok görünmez kontrol karakterlerine sahip bir dosyayla uğraşmak zorundayım, normal alandan farklı boşluklar ve bununla ilgili sıkıntılarım var.

Şimdi, bir şekilde belirli bir dosyadaki tüm harfleri harfle görüntülemek istiyorum ("soldan sağa" demek istiyorum, ama ne yazık ki sağdan sola dil ile uğraşıyorum) , unicode kod noktaları olarak, sadece kullanarak temel bash araçları (gibi vi, less, cat...). Bir şekilde mümkün mü?

Dosyayı onaltılık olarak görüntüleyebileceğimi biliyorum hexdump, ancak kod noktalarını yeniden hesaplamak zorunda kalacağım. Gerçekten gerçek unicode kod noktalarını görmek istiyorum, bu yüzden onları google ve ne olduğunu öğrenebilirim.

edit: Ben farklı kodlama için kodlamak istemiyorum ekleyeceğim (çünkü ben çevrimiçi bulmak budur). UTF8 dosya var ve bu iyi. Sadece tüm harflerin tam kod noktalarını bilmek istiyorum.

Yanıtlar:


6

Kendime sadece bunu yapan bir perl tek katmanlı yazdım ve orijinal karakteri de yazdırıyor. (Dosyayı STDIN'den bekler)

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

Ancak bundan daha iyi bir yol olmalı.


Evet, işe yarıyor ve bu komuta ihtiyacımız var
Yan King Yin

5

Bazı ortak suratlar için kod noktasına ihtiyacım vardı ve bununla geldi:

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

hangi baskılar

U+1F60A

"GÜLEN GÖZLERLE GÜLEN YÜZ" için kod noktasıdır .


3

Neftas'ın cevabından esinlenerek , burada tek bir karakter yerine dizelerle çalışan biraz daha basit bir çözüm var:

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.

Ayrıca stdin veya bir dosyadan okuyan ve orijinal metni unicode değerleriyle birlikte görüntüleyen bir Bash betiği yaptım:

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"

Örnek çıktı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.