ব্যাশে ফাইলের সমস্ত অক্ষরের জন্য ইউনিকোড কোডপয়েন্টগুলি দেখুন


11

আমাকে এমন একটি ফাইলের সাথে ডিল করতে হবে যাতে অনেকগুলি অদৃশ্য নিয়ন্ত্রণের অক্ষর রয়েছে যেমন "ডান থেকে বাম" বা "শূন্য প্রস্থে নন-জোয়ার", সাধারণ জায়গার চেয়ে আলাদা স্পেস এবং এগুলি নিয়ে আমার সমস্যা হয়।

এখন, আমি কোনওভাবে একটি প্রদত্ত ফাইলে সমস্ত অক্ষর দেখতে চাই, চিঠির মাধ্যমে চিঠিটি (আমি "বাম থেকে ডান" বলতে চাই, তবে আমি দুর্ভাগ্যক্রমে ডান থেকে বাম ভাষা নিয়েই ইউনিকোড কোডপয়েন্ট ) হিসাবে ব্যবহার করছি মৌলিক ব্যাশ সরঞ্জাম (যেমন vi, less, cat...)। এটা কি কোনওভাবে সম্ভব?

আমি জানি যে আমি ফাইলটি হেক্সাডেসিমালে প্রদর্শন করতে পারি hexdump, তবে আমাকে কোডপয়েন্টগুলি পুনরায় সংশোধন করতে হবে। আমি প্রকৃত ইউনিকোড কোডপয়েন্টগুলি দেখতে চাই, তাই আমি তাদের গুগল করতে পারি এবং কী ঘটছে তা জানতে পারি।

সম্পাদনা: আমি যুক্ত করব যে আমি এটিকে বিভিন্ন এনকোডিংয়ে ট্রান্সকোড করতে চাই না (কারণ এটিই আমি অনলাইনে সন্ধান করছি)। আমার কাছে ফাইলটি ইউটিএফ 8 এ আছে এবং এটি ঠিক আছে। আমি কেবল সমস্ত অক্ষরের সঠিক কোডপয়েন্টগুলি জানতে চাই।

উত্তর:


6

আমি নিজেই একটি পার্ল ওয়ান-লাইনার লিখেছিলাম, এটি কেবল এটি করে এবং এটি মূল চরিত্রটিও মুদ্রণ করে। (এটি STDIN থেকে ফাইলটি প্রত্যাশা করে)

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

তবে এর চেয়ে আরও ভাল উপায় থাকা উচিত be


হ্যাঁ, এটি কার্যকর হয় এবং আমাদের এই
আদেশটিটি

5

কিছু সাধারণ স্মাইলির জন্য আমার কোড পয়েন্ট দরকার ছিল এবং এটি নিয়ে এসেছিল:

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

যা "স্মাইলিং চোখের সাথে স্মাইলিং ফ্যাক্স " এর কোড পয়েন্ট ।


3

নেফাতাসের উত্তরে অনুপ্রাণিত হয়ে , এখানে একটি সামান্য সরল সমাধান যা একক চরের পরিবর্তে স্ট্রিংয়ের সাথে কাজ করে:

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.

আমি বাশ স্ক্রিপ্টও তৈরি করেছি যা স্টিডিন থেকে বা একটি ফাইল থেকে পড়ে এবং এটি ইউনিকোড মানগুলির পাশাপাশি মূল পাঠ্যটি প্রদর্শন করে:

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.