“লেজ -ফ | iconv -fsjis ”কিছুই আউটপুট দেয় না


14

আমি tail -fএকটি ফাইল চাই, তবে এর বিষয়বস্তু sjisএনকোডিংয়ের মধ্যে রয়েছে, সুতরাং এটি আমার টার্মিনালের স্থানীয় (utf-8) এনকোডিংয়ে রূপান্তর করা দরকার।

যখন আমি করি

লেজ -fx | iconv -fsjis

কোন আউটপুট হবে না। যেমন

লেজ এক্স | iconv -fsjis

কাজ করে, প্রথমে আমি ভেবেছিলাম এটি একটি বাফারিংয়ের সমস্যা, তবে পাইপে বাফারিং অফ করার বিষয়ে চেষ্টা করা unbufferএবং stdbufবর্ণনা করা কোনও লাভ হয়নি।

আসলে, এক্স-তে 10 কেও বেশি ডেটা যুক্ত হওয়ার পরেও কোনও আউটপুট থাকবে না, সুতরাং আমার ধারণা এটি কোনও বাফারিংয়ের সমস্যা নয় (বাফার 4k, যদি আমি ভুল না হয়ে থাকি) তবে আইকনভি কেবল তখনই আউটপুট তৈরি শুরু করবে এটি একটি ইওফ গ্রহণ করে।

তাহলে আমি কীভাবে আমার এসজি এনকোডযুক্ত ফাইলটি টেল-ফলো করতে পারি?

উত্তর:


11

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

আমি আরও দুটি সমাধান সম্পর্কে ভাবতে পারি, একটি হ'ল একটি ভাল-ব্যান্ড পদ্ধতি, অন্যটি একটি ইন-ব্যান্ড হ্যাক।

টার্মিনাল এমুলেটরের এনকোডিং (আউট-ব্যান্ড) পরিবর্তন করুন: একটি হ'ল আপনার টার্মিনাল এমুলেটরে অক্ষর এনকোডিং পরিবর্তন করা, সুতরাং এর নেটিভ এনকোডিংটি শিফট জেআইএস। আমি সবেমাত্র যাচাই করেছি konsole, এবং এটি সমর্থন করে। মেনু থেকে, দেখুন → চরিত্রের এনকোডিং → জাপানিস j তারপরে আপনি কেবল tail -fফাইলটি করতে পারেন , এবং konsoleমাল্টিবাইট অক্ষরগুলি ডিকোড করার এবং ফন্ট গ্লাইফগুলির সাথে তাদের মিলিয়ে দেওয়ার যত্ন নেবেন।

ফ্লাইতে ট্রান্সকোড টার্মিনাল এনকোডিং (ইন-ব্যান্ড; সেরা) : গিলিসের সৌজন্যে, যিনি আমাকে অনেক দিন luitপরে মনে করিয়ে দিয়েছিলেন । ব্যবহার করুন luit, যা আপনার XOrg বিতরণ নিয়ে আসা উচিত ছিল (ডেবিয়ান এটির প্যাকেজটিতে x11-utils)। এটি এর মতো ব্যবহার করুন:

$ luit -encoding SJIS -- tail -f x

এটি আপনার টার্মিনাল এনকোডিংটিতে / থেকে টার্মিনাল ট্রান্সকোড এসজেআইএস তৈরি করবে এবং চালাবে tail -f x। খারাপ দিকটি luitহ'ল এটি দ্বারা সমর্থিত এনকোডিংগুলির সম্পদ সমর্থন করে না libiconv। উল্টোটি এটি প্রায় সর্বত্র পাওয়া যায়।

ফ্লাইতে ট্রান্সকোড টার্মিনাল এনকোডিং (ইন-ব্যান্ড; হ্যাক) : ttyconvএটি একটি হ্যাক যা আমি বহু বছর আগে লিখেছিলাম (প্রথম দিকে সিতে, পরে পাইথনে পুনরায় করা হয়েছিল) যা libiconvটার্মিনাল I / O ট্রান্সকোড ব্যবহার করে। এটি একটি নতুন সিউডোটার্মিনাল তৈরি করেছে এবং (ক) আপনার স্থানীয় এনকোডিং থেকে আপনি যে অক্ষরগুলি টাইপ করেছেন তা দূরবর্তী এনকোডিংয়ে ট্রান্সকোড করে এবং (খ) রিমোট এনকোডিং থেকে প্রাপ্ত অক্ষরগুলি আপনার স্থানীয় এনকোডিংয়ে ট্রান্সকোড করে। আমি এটি সার্ভারের সাথে কথা বলার জন্য ব্যবহার করেছি যা স্ট্যান্ডার্ড লিনাক্স টার্মিনাল সমর্থন করে না এনকডিংগুলি ব্যবহার করে। দয়া করে মনে রাখবেন যে আমি যে রিমোট এনকোডিংগুলির সাথে এটি পরীক্ষা করেছিলাম সেগুলি হ'ল সিঙ্গল-বাইট এনকোডিংস, তাই আমি শিফট জেআইএস-এর পক্ষে কাজ করার গ্যারান্টি দিতে পারি না। বেশিরভাগ সিস্টেমে ইউনিকোডে স্যুইচ করে আমি আজকাল প্রায়শই এটি ব্যবহারের জন্য কল পাই না।

আপনি এটি এইভাবে ব্যবহার করবেন:

$ ttyconv -rsjis -- tail -f x

নেতিবাচক দিকটি ttyconvহ'ল আমি এটি লিখেছি, কেউই এটি ব্যবহার করে তবে আমি, এটি সম্ভবত বাগগুলি পূর্ণ। আমি এই এক্সেল। উল্টোটি এটি ব্যবহার করে libiconv, সুতরাং আপনার এনকোডিংটি যদি অস্বাভাবিক হয় তবে এটি আপনার সেরা বাজি। শেষ গণনায়, ttyconv --list100 টি এনকোডিং সমর্থন করে।


অান্তরিক ধন্যবাদ. আউট-ব্যান্ড আমার পক্ষে কাজ করে না (জিনোম-টার্মিনাল, এটি আপনাকে এনকোডিং পরিবর্তন করতে দেয়) তবে টিটিকনভ একটি কবজির মতো কাজ করে।
ইউজিন বেরেসভস্কি

2
এই দিন, আছে luitমান ব্যবহারে X11 ইউটিলিটি স্যুট, যা আপনার অনুরূপ অংশ ttyconv
গিলস 'এ-অশুভ হওয়া বন্ধ করুন'

@ গিলস luitএকই রকম, এটি আমার চেয়ে অনেক বেশি ভাল কাজ করে। ;) ধন্যবাদ! এই কারণেই আমি প্রথম স্থানে ব্যবহার বন্ধ করে দিয়েছি। যে 12 বছর পরে আমি এমনকি কমান্ডের নামটিও ভুলে যেতে পেরেছি এবং তখন থেকেই আমি এটির সন্ধান করছি।
অ্যালেক্সিয়স

@ গিলস luitআমার জন্যও কাজ করে। কেন আপনি এটিকে একটি 'অফিসিয়াল' উত্তর বানাবেন না? এটি আমার ইনস্টলেশনের (ডেবিয়ান) অংশ ছিল এবং এটি আমার পক্ষে ব্যবহার করা সবচেয়ে সহজ।
ইউজিন বেরেসভস্কি

1
আমি luitএসজেআইএসের সেরা পছন্দ হিসাবে অন্তর্ভুক্ত করার জন্য উত্তরটি আপডেট করেছি। দুঃখজনকভাবে, দেখে মনে হচ্ছে এটি প্রতিটি এনকোডিংকে সমর্থন করে libiconvনা। দেখে মনে হচ্ছে আমাকে এখনও নিজের সমাধানটি আমার নিজের পরাবাস্তব উদ্দেশ্যে ব্যবহার করতে হবে। :)
অ্যালেক্সিয়াস

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