কীভাবে সমস্ত শতাংশ-এনকোডেড ইউটিএফ -8 সাবস্ট্রিংগুলি প্লেইন ইউটিএফ -8 পাঠ্যের সাথে প্রতিস্থাপন করবেন?


9

আমি ইউআরএলগুলিতে প্রচুর% এনকোডেড ইউটিএফ -8 পাঠ্য সহ একটি এইচটিএমএল ফাইল পেয়েছি।

উদাহরণস্বরূপ "% D1% 80% D0% B5% D1% 81% D1% 83% D1% 80% D1% 81% D1% 8B" এর অর্থ দাঁড়ায় ""ы" (রাশিয়ান ভাষায় "রিসোর্স")।

কাজটি হ'ল পাঠযোগ্য UTF-8 পাঠ্যের সাথে এই জাতীয় সমস্ত সাবস্ট্রিংগুলি প্রতিস্থাপন করা।

কার্যটি সহজ করার জন্য আমরা বিবেচনা করতে পারি %ফাইলটিতে অন্য কোনও চিহ্ন ব্যবহার নেই । বর্ণের অঙ্কগুলি উচ্চ এবং নিম্ন উভয় ক্ষেত্রে হতে পারে।

আমি এই সাথে এইরূপ সূচারূভাবে সম্পন্ন করা যাবে সন্দেহ sed, perl, awkবা কিছু কিন্তু কিভাবে জানি না।

এই ওয়েব অ্যাপ্লিকেশনটি আপনি সেখানে আটকানো পাঠ্যের সাহায্যে কৌশলটি করেছেন বলে মনে হচ্ছে।

উত্তর:


9

ব্যাশ, zsh, গনুহ প্রতিধ্বনি বা কিছু সিস্টেমে ksh কিছু বাস্তবায়নের সঙ্গে, এই দ্বারা কেবল সঙ্কেতমুক্ত করা যেতে পারে echo -eসব প্রতিস্থাপন পর %সঙ্গে \x

url_encoded_string="%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B"
temp_string=${url_encoded_string//%/\\x}

printf '%s\n' "$temp_string"
# output: \xD1\x80\xD0\xB5\xD1\x81\xD1\x83\xD1\x80\xD1\x81\xD1\x8B

echo -e "$temp_string"
# output: ресурсы

(এটি ধরে নিয়েছে যে স্ট্রিংটিতে ব্যাকস্ল্যাশ অক্ষর নেই এবং এটি আপনার echoকমান্ড দ্বারা সমর্থিত বিকল্পগুলির মধ্যে একটি নয় )

@ জোশলি যেমন উল্লেখ করেছেন, "ইকো ক্যাভিয়েট" সরাসরি ব্যবহার করে এড়ানো যেতে পারে:

printf ${url_encoded_string//%/\\x}

পরিবর্তে সরাসরি প্রথম কমান্ড পিছনে।


মনে রাখবেন যে এই মার্জিত সমাধানটি কেবল ইউটিএফ -8 নয়, কোনও এনকোডিংয়ের সাথে কাজ করবে (যেমন, ~ এবং অন্যদের জন্য এনকোডিংগুলি থেকে মুক্তি পাবে my আমার টুলবক্সে যুক্ত করার জন্য আরও একটি কৌশল Thanks ধন্যবাদ!
ভোনব্রান্ড

5

পার্ল সহ:

perl -pe 's/%([0-9A-F]{2})/pack"H2",$1/gei'

বা সাথে URI::Escape:

perl -MURI::Escape -pe '$_=uri_unescape$_'

আমি এটি ভালবাসি কারণ $_ gnu.org/software/bash/manual/html_node/Spected-Paraters.html
নিমো

@Nemo, $_এখানে perl'র $_, না bashএর। সঙ্গে একযোগে -pবিকল্প, পার্ল অভিব্যক্তি যে ইনপুট রেকর্ডের জন্য চালানো হয় সঞ্চিত বর্তমান রেকর্ড দিয়ে (রেকর্ড আর্গুমেন্ট বা stdin হিসেবে দেওয়া ফাইলগুলি পড়তে হচ্ছে যদি কোনো যুক্তি প্রদান করা হয়), $_। যে অনুরূপ awk'র $0
স্টাফেন চেজেলাস

0

একটি প্রোগ্রাম বলা হয়েছে convmvযা আপনাকে সহায়তা করতে পারে।

সহজভাবে ব্যবহার convmv --unescape /some_path/target_file। এটি একটি শুকনো রান করবে।

একবার আপনি নিশ্চিত হয়ে গেলে, convmv --notest --unescape /some_path/target_fileচালিয়ে যেতে ব্যবহার করুন।

এই প্রোগ্রামের হোমপেজটি হ'ল: http://j3e.de/linux/convmv/

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.