| enca(1) | enca(1) |
نام (NAME)
enca - تشخیص و تبدیل کدگذاری فایلهای متنی
خلاصه دستور (SYNOPSIS)
enca [-L LANGUAGE] [OPTION]...
[FILE]...
enconv [-L LANGUAGE] [OPTION]...
[FILE]...
مقدمه و مثالها (INTRODUCTION AND EXAMPLES)
اگر به قدر کافی خوششانس باشید، تنها دو موردی که نیاز به دانستن آنها خواهید داشت عبارتند از: دستور
enca FILE
به شما خواهد گفت که فایل FILE از چه کدگذاری استفاده میکند (بدون تغییر دادن آن)، و
enconv FILE
فایل FILE را به کدگذاری بومی locale شما تبدیل خواهد کرد. برای تبدیل فایل به کدگذاری دیگری، از گزینهٔ -x استفاده کنید (برای جزئیات، مدخل -x در بخش گزینهها (OPTIONS) و بخشهای CONVERSION و ENCODINGS را ببینید).
هر دوی آنها با چندین فایل و همچنین ورودی (خروجی) استاندارد نیز کار میکنند. به عنوان مثال:
enca -x latin2 <sometext | lpr
اطمینان میدهد که فایل «sometext» هنگام ارسال به چاپگر در کدگذاری ISO Latin 2 باشد.
دلیل اصلی اینکه ممکن است این دستورات با شکست مواجه شده و فایلهای شما را به دادههای نامفهوم تبدیل کنند این است که Enca برای تشخیص کدگذاری باید زبان آنها را بداند. این برنامه تلاش میکند تا زبان و charset ترجیحی شما را از تنظیمات locale تشخیص دهد، که ممکن است آن چیزی نباشد که شما میخواهید.
میتوانید (یا باید) از گزینهٔ -L استفاده کنید تا زبان مناسب را مشخص نمایید. فرض کنید یک فایل HTML روسی به نام «file.htm» را بارگیری کردهاید که ادعا میکند windows-1251 است اما چنین نیست. بنابراین دستور زیر را اجرا میکنید
enca -L ru file.htm
و متوجه میشوید که کدگذاری آن (برای مثال) KOI8-R است. توجه داشته باشید که در حال حاضر زبانهای پشتیبانیشدهٔ زیادی وجود ندارد (بخش LANGUAGES را ببینید).
هشدار دیگر مربوط به این واقعیت است که چندین ویژگی Enca، بهویژه قابلیتهای تبدیل charset آن، شدیداً به ابزارهای دیگری که روی سیستم شما نصب شدهاند وابسته است (بخش CONVERSION را ببینید)--برای دریافت فهرست ویژگیها دستور زیر را اجرا کنید (بخش FEATURES را ببینید):
enca --version
همچنین دستور زیر را امتحان کنید
enca --help
تا شرح تمام گزینههای دیگر Enca را دریافت کنید (و متوجه شوید که ادامهٔ این صفحهٔ راهنما اضافی است).
توضیحات (DESCRIPTION)
Enca فایلهای متنی دادهشده، یا در صورت ارائه نشدن هیچ فایلی، ورودی استاندارد را میخواند و از دانش مربوط به زبان آنها (که باید توسط شما پشتیبانی شود) و ترکیبی از تجزیه، تحلیل آماری، حدس زدن و جادوی سیاه برای تعیین کدگذاری آنها استفاده میکند، سپس نتیجه را در خروجی استاندارد چاپ مینماید (یا اعتراف میکند که هیچ ایدهای ندارد کدگذاری چه چیزی میتواند باشد). بهطور پیشفرض، Enca نتایج را به صورت توصیفهایی چندخطی و خوانا برای انسان ارائه میدهد؛ چندین قالب دیگر نیز در دسترس هستند--گزینشگرهای نوع خروجی را در ادامه ببینید.
همچنین Enca میتواند در صورت درخواست شما، فایلها را با استفاده از یک مبدل توکار، یک کتابخانهٔ تبدیل، یا از طریق فراخوانی یک مبدل خارجی به کدگذاری دیگری با نام ENC تبدیل کند.
هدف اصلی Enca این است که بتوان به صورت بدون نظارت و به عنوان یک ابزار تبدیل خودکار از آن استفاده کرد، هرچند شاید هنوز به این مرحله نرسیده باشد (لطفاً بخش امنیت (SECURITY) را ببینید).
لطفاً توجه داشته باشید که به جز در موارد نادر، Enca واقعاً باید زبان فایلهای ورودی را بداند تا بتواند پاسخی قابل اعتماد به شما ارائه دهد. از سوی دیگر، در این حالت میتواند به خوبی از پس فایلهایی که کاملاً متنی نیستند برآید یا حتی charset رشتههای متنی را درون یک فایل باینری تشخیص دهد؛ البته این امر به ماهیت مؤلفهٔ غیرمتنی بستگی دارد.
Enca به ساختار فایلهای ورودی اهمیتی نمیدهد و آنها را به صورت یک قطعه متن/دادهٔ یکپارچه میبیند. در مورد فایلهای چندبخشی (مانند mailboxes)، ابتدا باید از ابزاری که از ساختار مطلع است برای استخراج بخشهای جداگانه استفاده کنید. این بهای توانایی تشخیص کدگذاری هرگونه فایل آسیبدیده، ناقص یا به نحوی نادرست است.
گزینهها به چند دسته تقسیم میشوند: گزینههای حالت عملکرد، انتخابگرهای نوع خروجی، پارامترهای حدس، پارامترهای تبدیل، گزینههای عمومی و فهرستها.
تمامی گزینههای بلند تا زمانی که مبهم نباشند میتوانند کوتاه شوند؛ آرگومانهای اجباری گزینههای بلند برای گزینههای کوتاه نیز اجباری هستند.
حالتهای عملکرد (Operation modes)
شامل موارد زیر هستند:
- -c, --auto-convert
- معادل
فراخوانی Enca
بهصورت enconv
است.
اگر هیچ انتخابگر نوع خروجی مشخص نشده باشد، کدگذاریهای فایل را تشخیص میدهد، مجموعه نویسهٔ (charset) ترجیحی شما را از localeها حدس میزند و فایلها را به آن تبدیل میکند (تنها با ویژگی +target-charset-auto در دسترس است).
- -g, --guess
- معادل
فراخوانی Enca
بهصورت enca
است.
اگر هیچ انتخابگر نوع خروجی مشخص نشده باشد، کدگذاریهای فایل را تشخیص داده و آنها را گزارش میکند.
انتخابگرهای نوع خروجی (Output type selectors)
مشخص میکنند که Enca پس از تعیین کدگذاری چه اقدامی انجام دهد؛ اغلب آنها صرفاً میان نامها، قالبها و قراردادهای مختلف برای شیوهٔ نمایش کدگذاریها انتخاب میکنند، اما یکی از آنها (-x) خاص است: به Enca میگوید تا فایلها را به یک کدگذاری دیگر یعنی ENC بازکدگذاری کند. این گزینهها مانعةالجمع هستند؛ اگر بیش از یک انتخابگر نوع خروجی مشخص کنید، آخرین گزینه اولویت خواهد داشت.
چندین نوع خروجی، بیانگر نام مجموعه نویسهای هستند که توسط برنامهای دیگر استفاده میشود، اما تمامی آن برنامهها همهٔ مجموعه نویسههایی را که Enca میشناسد پشتیبانی نمیکنند. هشدار: Enca در چنین مواردی تفاوتی میان یک مجموعه نویسهٔ ناشناخته و مجموعه نویسهای که در فضای نام (namespace) دادهشده نامی ندارد قائل نمیشود.
- -d, --details
- قبلاً چند صفحه جزئیات دربارهٔ فرایند حدس زدن چاپ میکرد، اما از آنجا که Enca صرفاً برنامهای پیوندخورده با کتابخانهٔ Enca است، این کار ممکن نیست و این گزینه تقریباً معادل --human-readable است، با این تفاوت که در صورت عدم تشخیص کدگذاری توسط Enca، دلیل شکست را گزارش میکند.
- -e, --enca-name
- نام مناسبِ
Enca برای
مجموعه
نویسه را
چاپ
میکند؛
یعنی شاید
پذیرفتهشدهترین
و کموبیش
انسانخواناترین
شناسهٔ
مجموعه
نویسه، به
همراه سطوح
(surfaces)
پیوستشده.
این نام هنگام فراخوانی یک مبدل خارجی نیز استفاده میشود.
- -f, --human-readable
- توصیفی
کلامی از
مجموعه
نویسه و
سطوح (surfaces)
تشخیصدادهشده
را چاپ
میکند--چیزی
که انسان به
بهترین نحو
آن را متوجه
میشود. این
رفتار
پیشفرض
است.
قالب دقیق به این شرح است: خط نخست تنها شامل نام مجموعه نویسه است و پس از آن صفر یا چند خط تورفته حاوی نام سطوح تشخیصدادهشده میآید. با این حال، این قالب برای پردازشهای ماشینی بعدی مناسب نبوده و برای آن طراحی نشده است، و توصیفهای کلامی مجموعه نویسه ممکن است در آینده تغییر کنند.
- -i, --iconv-name
- نحوهٔ
نامگذاری
مجموعه
نویسهٔ
تشخیصدادهشده
توسط iconv(3)
(و/یا iconv(1)) را
چاپ میکند.
به طور
دقیقتر،
یکی از
نامهای
مستعار
پذیرفتهشده
توسط iconv را که
کموبیش
اختیاری
انتخاب شده
است چاپ
میکند.
مجموعه
نویسهای
که برای iconv
ناشناخته
باشد،
ناشناخته
تلقی
میشود.
این نوع خروجی تنها زمانی معنادار است که Enca با پشتیبانی از iconv کامپایل شده باشد (ویژگی +iconv-interface).
- -r, --rfc1345-name
- نام مجموعه
نویسه
مطابق با RFC 1345
را چاپ
میکند.
هنگامی که
چنین نامی
وجود ندارد
زیرا RFC 1345
کدگذاری
مفروض را
تعریف
نکرده است،
نام دیگری
که در یک RFC
دیگر تعریف
شده یا
صرفاً نامی
که نویسنده
آن را
«استانداردترین
شکل»
میداند،
چاپ میشود.
از آنجا که RFC 1345 سطوح را تعریف نمیکند، هیچ اطلاعات سطحی پیوست نمیشود.
- -m, --mime-name
- نام ترجیحی
MIME برای
مجموعه
نویسهٔ
تشخیصدادهشده
را چاپ
میکند. این
همان نامی
است که
معمولاً
هنگام
تصحیح
رایانامهها
یا صفحات وب
باید
استفاده
کنید.
مجموعه نویسهای که در http://www.iana.org/assignments/character-sets موجود نباشد، ناشناخته تلقی میشود.
- -s, --cstocs-name
- نحوهٔ نامگذاری مجموعه نویسهٔ تشخیصدادهشده توسط cstocs(1) را چاپ میکند. مجموعه نویسهای که برای cstocs ناشناخته باشد، ناشناخته تلقی میشود.
- -n, --name=WORD
- نام مجموعه
نویسه
(کدگذاری)
انتخابشده
توسط WORD را
چاپ میکند
(تا زمانی
که نامفهوم
نباشد
میتواند
خلاصه شود).
برای
نامهای
ذکرشده در
بالا، --name=WORD
معادل --WORD
است.
استفاده از aliases بهعنوان نوع خروجی باعث میشود Enca فهرستی از تمام نامهای مستعار پذیرفتهشده برای مجموعه نویسهٔ تشخیصدادهشده را چاپ کند.
- -x, --convert-to=[..]ENC
- فایل را به
کدگذاری ENC
تبدیل
میکند.
علامت اختیاری «..» قبل از نام کدگذاری معنای خاصی ندارد، جز اینکه میتوانید از آن برای یادآوری این نکته استفاده کنید که برخلاف recode(1)، باید کدگذاری موردنظر را به جای کدگذاری فعلی مشخص کنید.
میتوانید از زنجیرههای بازکدگذاری recode(1) یا هرگونه مشخصات بازکدگذاری غیراستاندارد دیگر برای ENC استفاده کنید، به شرط آنکه به Enca بگویید از ابزاری برای تبدیل استفاده کند که آن را درک میکند (بخش CONVERSION را ببینید).
هنگامی که Enca در تشخیص کدگذاری ناموفق باشد، یک هشدار چاپ کرده و فایل را دستنخورده رها میکند؛ اگر بهعنوان یک فیلتر اجرا شود تمام تلاش خود را میکند تا ورودی استاندارد را بدون تغییر به خروجی استاندارد رونوشت کند. با این وجود، نباید به آن اتکا کنید و همواره پشتیبان تهیه نمایید.
تنها یک مورد وجود دارد: -L که زبان فایلهای ورودی را تنظیم میکند. این گزینه اجباری است (اما به پایین مراجعه کنید).
- -L, --language=LANG
- زبان
فایلهای
ورودی را به
LANG تنظیم
میکند.
بهطور دقیقتر، LANG میتواند هر نام locale معتبر (یا نام مستعار با ویژگی +locale-alias) از زبانی پشتیبانیشده باشد. همچنین میتوانید `none' را بهعنوان نام زبان مشخص کنید، که در این صورت تنها کدگذاریهای چندبایتی شناسایی میشوند. دستور
enca --list languages
را برای دریافت فهرست زبانهای پشتیبانیشده اجرا کنید. هنگامی که زبانی را مشخص نکنید، Enca تلاش میکند زبان شما را از تنظیمات locale حدس بزند و فرض میکند فایلهای ورودی از این زبان استفاده میکنند. برای جزئیات به بخش LANGUAGES مراجعه کنید.
پارامترهای تبدیل (Conversion parameters)
کنترل دقیقتری روی چگونگی انجام تبدیل مجموعه نویسهها به شما میدهند. زمانی که -x بهعنوان نوع خروجی مشخص نشده باشد، این پارامترها هیچ اثری ندارند. لطفاً برای جزئیات دقیق تبدیل به بخش CONVERSION مراجعه کنید.
- -C, --try-converters=LIST
- مجموعه LIST
جداشده با
کاما را به
فهرست
تبدیلکنندههایی
که هنگام
درخواست
تبدیل
آزمایش
میشوند،
اضافه
میکند.
نامهای
آنها را
میتوان تا
زمانی که
ابهامی
ایجاد
نکند،
خلاصه کرد.
دستور
enca --list converters
را برای دریافت فهرست همه نامهای معتبر تبدیلکننده اجرا کنید (و برای توضیحات آنها بخش CONVERSION را ببینید).
فهرست پیشفرض به نحوه کامپایل شدن Enca بستگی دارد، دستور
enca --help
را برای اطلاع از فهرست تبدیلکنندههای پیشفرض اجرا کنید.
توجه داشته باشید که فهرست پیشفرض تنها زمانی استفاده میشود که اصلاً -C را مشخص نکرده باشید. در غیر این صورت، فهرست به گونهای ساخته میشود که گویی در ابتدا خالی بوده و هر -C تبدیلکننده(های) جدیدی را به آن میافزاید. علاوه بر این، مشخص کردن none بهعنوان نام تبدیلکننده باعث پاک شدن فهرست تبدیلکنندهها میشود.
- -E, --external-converter-program=PATH
- نام برنامه
تبدیلکننده
خارجی را
روی PATH
تنظیم
میکند.
تبدیلکننده
خارجی
پیشفرض
بستگی به
نحوه
کامپایل
شدن enca دارد و
امکان
استفاده از
تبدیلکنندههای
خارجی ممکن
است اصلاً
در دسترس
نباشد.
دستور
enca --help
را برای یافتن برنامه تبدیلکننده پیشفرض در ساخت enca خود اجرا کنید.
گزینههای عمومی (General options)
در دستهبندیهای دیگر گزینهها قرار نمیگیرند...
- -p, --with-filename
- Enca را وادار
میکند تا
نام فایل
مربوطه را
بهعنوان
پیشوند به
هر نتیجه
اضافه کند.
بهطور
پیشفرض،
زمانی که Enca
روی چندین
فایل اجرا
شود، نام
فایلها را
پیشوند
نتایج قرار
میدهد.
ورودی استاندارد بهصورت STDIN و خروجی استاندارد بهصورت STDOUT چاپ میشود (مورد دوم احتمالاً فقط در پیامهای خطا دیده خواهد شد).
- -P, --no-filename
- Enca را وادار میکند تا نتایج را با نام فایلها پیشوند نکند. بهطور پیشفرض، Enca هنگام اجرا روی یک فایل واحد (شامل ورودی استاندارد)، نام فایل را پیشوند نتیجه قرار نمیدهد.
- -V, --verbose
- سطح پرگویی
(verbosity) را
افزایش
میدهد (هر
بار
استفاده،
آن را یک
واحد
افزایش
میدهد).
در حال حاضر این گزینه چندان مفید نیست زیرا بخشهای مختلف Enca واکنش متفاوتی به سطح پرگویی یکسان نشان میدهند و در بیشتر موارد اصلاً واکنشی نشان نمیدهند.
همگی پایانی (terminal) هستند؛ یعنی هنگامی که Enca با یکی از آنها مواجه شود، فهرست درخواستی را چاپ کرده و بدون پردازش گزینههای بعدی خاتمه مییابد.
- -h, --help
- راهنمای خلاصهای از نحوه استفاده را چاپ میکند.
- -G, --license
- مجوز کامل Enca را چاپ میکند (در صورت امکان، از طریق یک صفحهبند).
- -l, --list=WORD
- فهرست
مشخصشده
توسط WORD را
چاپ میکند
(تا زمانی
که ابهامی
وجود
نداشته
باشد،
میتواند
بهصورت
مختصر
آورده شود).
فهرستهای
موجود شامل
موارد زیر
هستند:
built-in-charsets. تمام کدگذاریهای قابل تبدیل توسط تبدیلکننده توکار (built-in)، بر اساس گروه (برای تبدیل داخلی، هر دو کدگذاری ورودی و خروجی باید از این فهرست بوده و متعلق به یک گروه باشند).
built-in-encodings. معادل built-in-charsets است، اما منسوخ در نظر گرفته میشود؛ برای مدتی با یک هشدار پذیرفته خواهد شد.
converters. تمام نامهای معتبر تبدیلکننده (جهت استفاده با -C).
charsets. تمام کدگذاریها (مجموعهنویسهها). میتوانید مشخص کنید چه نامهایی با --name یا هر گزینشگرِ نوع نام خروجی دیگری چاپ شوند (البته در این حالت تنها کدگذاریهایی چاپ میشوند که در فضای نام دادهشده، نامی داشته باشند)؛ این گزینشگر باید پیش از --list مشخص شود.
encodings. معادل charsets است، اما منسوخ در نظر گرفته میشود؛ برای مدتی با یک هشدار پذیرفته خواهد شد.
languages. تمام زبانهای پشتیبانیشده به همراه مجموعهنویسههای متعلق به آنها. توجه داشته باشید که در اینجا نوع خروجی، سبک نام زبان را انتخاب میکند نه سبک نام مجموعهنویسه را.
names. تمام مقادیر ممکن برای گزینه --name.
lists. تمام مقادیر ممکن برای این گزینه. (عجیب است؟)
surfaces. تمام سطوحی (surfaces) که Enca میشناسد.
- -v, --version
- نسخه برنامه و فهرست ویژگیها را چاپ میکند (بخش ویژگیها (FEATURES) را ببینید).
تبدیل (CONVERSION)
اگرچه Enca در ابتدا صرفاً به عنوان ابزاری برای حدس زدن کدگذاری طراحی شده بود، اما اکنون روشهای متعددی را برای تبدیل مجموعهنویسه ارائه میدهد. میتوانید با استفاده از -C مشخص کنید کدامیک از آنها به کار گرفته شوند.
برنامه Enca تبدیلکنندهها را از فهرست مشخصشده توسط -C به ترتیب امتحان میکند تا به موردی برسد که قادر به انجام تبدیل درخواستی باشد، یا اینکه فهرست به پایان برسد. شما باید ابتدا تبدیلکنندههای ترجیحی و سپس موارد با اولویت کمتر را مشخص کنید. تبدیلکننده خارجی (extern) باید همیشه در انتهای فهرست و تنها به عنوان آخرین راهحل مشخص شود، زیرا در صورت شکست معمولاً امکان بازیابی وجود ندارد. فهرست پیشفرض تبدیلکنندهها همیشه با built-in شروع میشود و سپس با اولین موردِ موجود از میان: librecode، iconv یا هیچکدام (nothing) ادامه مییابد.
لازم به ذکر است هنگامی که Enca اعلام میکند قادر به انجام تبدیل نیست، صرفاً به این معناست که هیچیک از تبدیلکنندهها قادر به انجام آن نیستند. هنوز ممکن است بتوان تبدیل درخواستی را در چند مرحله و با استفاده از چندین تبدیلکننده انجام داد، اما برای کشف نحوه انجام آن، احتمالاً به هوش انسانی نیاز خواهد بود.
سادهترین و با اختلاف، سریعترین مبدل در بین همه است؛ تنها میتواند چند تبدیل بایتبهبایت را انجام دهد و فایلها را مستقیماً درجا تغییر میدهد (ممکن است خطرناک تلقی شود، اما کاملاً کارآمد است). میتوانید فهرست تمام کدگذاریهایی را که میتواند تبدیل کند با دستور زیر دریافت کنید:
enca --list built-in
گذشته از سرعت، مزیت اصلی (و همچنین عیب) آن این است که اهمیتی نمیدهد: صرفاً نویسههایی را که در کدگذاری مقصد دارای معادل هستند تبدیل میکند، به هیچ چیز دیگری دست نمیزند و هرگز هیچ پیام خطایی چاپ نمیکند.
این تبدیلکننده را میتوان با -C به صورت built-in مشخص کرد.
تبدیلکنندهٔ Librecode (Librecode converter)
رابطی به کتابخانهٔ GNU recode است که وظیفهٔ اصلی بازکدگذاری را انجام میدهد. ممکن است در زمان کامپایل گنجانده شده باشد یا نباشد؛ دستور زیر را اجرا کنید
enca --version
تا از در دسترس بودن آن در ساخت enca خود مطلع شوید (ویژگی +librecode-interface).
پیش از استفاده باید با recode(1) آشنایی داشته باشید، چرا که recode ابزاری نسبتاً پیچیده و قدرتمند برای تبدیل مجموعه نویسهها است. ممکن است هنگام استفاده از آن به همراه Enca با مشکلاتی مواجه شوید، بهویژه به این دلیل که پشتیبانی Enca از سطوح (surfaces) کاملاً سازگار نیست، به این دلیل که recode بیش از حد تلاش میکند تا تبدیل را برگشتپذیر کند، به این دلیل که گاهی اوقات خطاهای I/O را بیصدا نادیده میگیرد، و به این دلیل که بهطرز باورنکردنی دارای اشکال (buggy) است. لطفاً برای جزئیات دربارهٔ کتابخانهٔ recode، صفحات info مربوط به GNU recode را مشاهده کنید.
این تبدیلکننده را میتوان با -C به صورت librecode مشخص کرد.
تبدیلکنندهٔ Iconv (Iconv converter)
رابطی به توابع تبدیل iconv(3) در UNIX98 است که وظیفهٔ اصلی بازکدگذاری را انجام میدهند. ممکن است در زمان کامپایل گنجانده شده باشد یا نباشد؛ دستور زیر را اجرا کنید
enca --version
تا از در دسترس بودن آن در ساخت enca خود مطلع شوید (ویژگی +iconv-interface).
اگرچه iconv در اکثر سیستمهای امروزی وجود دارد، اما بهندرت مجموعهای کاربردی از تبدیلهای موجود را ارائه میدهد؛ تنها استثنای قابل توجه iconv موجود در GNU libc است. همچنین معمولاً در مورد سطوح (surfaces) بسیار سختگیر است (در حالی که، در همان زمان، تبدیل سطح را پیادهسازی نمیکند). با این حال، احتمالاً تنها ابزار استاندارد(سازیشدهای) است که قادر به انجام تبدیل از/به یونیکد است. لطفاً برای جزئیات دربارهٔ قابلیتهای آن در سیستم خاص خود، مستندات iconv را ببینید.
این تبدیلکننده را میتوان با -C به صورت iconv مشخص کرد.
تبدیلکنندهٔ خارجی (External converter)
یک ابزار تبدیل خارجی دلخواه است که میتواند با گزینهٔ -E مشخص شود (در آنِ واحد حداکثر یکی میتواند تعریف شود). چند تبدیلکنندهٔ استاندارد وجود دارد که همراه با enca ارائه میشوند: cstocs، recode، map، umap و piconv. همگی اسکریپتهای پوششی هستند: برای cstocs(1)، recode(1)، map(1)، umap(1) و piconv(1).
لطفاً توجه داشته باشید که enca کنترل کمی بر آنچه تبدیلکنندهٔ خارجی واقعاً انجام میدهد دارد. اگر آن را روی /bin/rm تنظیم کنید، مسئولیت عواقب آن کاملاً بر عهدهٔ خودتان خواهد بود.
اگر میخواهید تبدیلکنندهٔ اختصاصی خود را برای استفاده با enca بسازید، باید بدانید که همیشه به این صورت فراخوانی میشود:
CONVERTER ENC_CURRENT ENC FILE [-]
که در آن CONVERTER مقداری است که توسط -E تعیین شده، ENC_CURRENT کدگذاری شناساییشده است، ENC مقداری است که با -x مشخص شده، و FILE فایلی است که باید تبدیل شود؛ یعنی برای هر فایل بهطور جداگانه فراخوانی میشود. پارامتر چهارم اختیاری، -، باید باعث شود (در صورت وجود) که نتیجهٔ تبدیل به جای بازنویسیِ فایل FILE، به خروجی استاندارد ارسال شود. تبدیلکننده همچنین باید مراقب باشد که مجوزهای فایل را تغییر ندهد، در صورت شکست کد خطای 1 را برگرداند و فایلهای موقت خود را پاکسازی کند. لطفاً برای نمونهها به تبدیلکنندههای خارجی استاندارد مراجعه کنید.
این تبدیلکننده را میتوان با -C به صورت extern مشخص کرد.
روش سرراست برای تعیین مجموعه نویسهٔ مقصد، استفاده از گزینهٔ -x است که بر هر مقدار پیشفرضی ارجحیت دارد. هنگامی که Enca با نام enconv فراخوانی شود، مجموعه نویسه پیشفرض مقصد دقیقاً به همان روش recode(1) انتخاب میشود.
اگر متغیر محیطی DEFAULT_CHARSET مقداردهی شده باشد، از آن به عنوان مجموعه نویسه مقصد استفاده میشود.
در غیر این صورت، اگر سیستم شما تابع nl_langinfo(3) را ارائه دهد، مجموعه نویسه بومیِ لوکال جاری به عنوان مجموعه نویسه مقصد به کار میرود.
هنگامی که هر دو روش با شکست مواجه شوند، Enca اعلام خطا کرده و متوقف میشود.
نکاتی درباره بازگشتپذیری
اگر بازگشتپذیری برای شما حیاتی است، اصلاً نباید از enca به عنوان تبدیلکننده استفاده کنید (یا شاید بتوانید، اما با یک پوستهٔ (wrapper) بسیار ویژه که برای recode(1) طراحی شده باشد). در غیر این صورت، دستکم باید بدانید که چهار روش اساسی برای مدیریت موجودیتهای نویسهای تبدیلناپذیر وجود دارد:
شکست خوردن (fail)--این نیز یک امکان است، و اتفاقاً دقیقاً همان کاری است که پیادهسازی فعلی iconv در GNU libc انجام میدهد (به recode نیز میتوان گفت که این کار را انجام دهد)
دست نزدن به آنها (don't touch them)--این کاری است که تبدیلکنندهٔ داخلی enca همیشه انجام میدهد و recode نیز قادر به انجام آن است؛ اگرچه این روش بازگشتپذیر نیست، اما معمولاً یک انسان (حداقل از نظر اصولی) قادر به بازسازی متن اصلی خواهد بود
تقریب زدن آنها (approximate them)--این کاری است که cstocs و همچنین recode (البته به شیوهای متفاوت) میتوانند انجام دهند؛ و اگر فقط میخواهید این متن لعنتی را خوانا کنید، بهترین گزینه است
حذف کردن آنها (drop them out)--این کاری است که هم recode و هم cstocs میتوانند انجام دهند (cstocs همچنین میتواند به جای نادیدهگرفتن صرف، این نویسهها را با نویسهای ثابت جایگزین کند)؛ این حالت زمانی مفید است که نویسههای حذفشدنی تنها حاوی نوفه (نویز) باشند.
لطفاً برای جزئیات بیشتر در این باره، به راهنمای تبدیلکنندهٔ مورد نظر خود مراجعه کنید. به طور کلی، اگر آنقدر خوششانس نباشید که تمام نویسههای موجود در فایلتان قابل تبدیل باشند، در هر حال دخالت دستی لازم خواهد بود.
نکات کارایی
کارایی ضعیف تبدیلکنندههای موجود، یکی از دلایل اصلی گنجاندن تبدیلکنندهٔ توکار در enca بوده است. سعی کنید تا جای ممکن از آن استفاده کنید، یعنی زمانی که فایلهای مورد نظر از نظر مجموعه نویسه به اندازه کافی تمیز یا به اندازه کافی بههمریخته هستند که هوش توکارِ صفرِ آن اهمیتی نداشته باشد. این تبدیلکننده نیازی به فضای دیسک اضافی یا حافظه بیشتر ندارد و میتواند روی فایلهای بزرگ بیش از ۱۰ برابر بهتر از recode(1) و روی فایلهای کوچک بیش از ۴۰۰ برابر سریعتر از نسخه پرل (یعنی نسخه سریعتر) cstocs(1) عمل کند (در واقع سرعت آن تقریباً با دستور سادهٔ cp(1) برابری میکند).
تا زمانی که کاملاً ضروری نباشد از تبدیلکنندههای خارجی پرهیز کنید، زیرا تمام فرایندهای انشعاب (forking) و جابهجایی دادهها به طرز باورنکردنی کند است.
کدگذاریها (ENCODINGS)
میتوانید فهرست مجموعههای نویسه شناختهشده را با
enca --list charsets
دریافت کنید و با استفاده از پارامتر --name میتوانید هر نامی را که میخواهید در فهرست نمایش یابد انتخاب کنید. همچنین میتوانید تمام سطوح (surfaces) را با
enca --list surfaces
فهرست کنید. نامهای کدگذاری و سطوح نسبت به بزرگی و کوچکی حروف حساس نیستند و نویسههای غیرالفباییعددی در نظر گرفته نمیشوند. با این حال، اکثر نویسههای غیرالفباییعددی اصلاً مجاز نیستند. تنها موارد مجاز عبارتاند از: `-`، `_`، `.`، `:` و `/' (به عنوان جداکننده مجموعه نویسه/سطح). بنابراین `ibm852' و `IBM-852' یکسان هستند، در حالی که `IBM 852' پذیرفته نمیشود.
مجموعههای نویسه (Charsets)
فهرست زیر از مجموعههای نویسه شناختهشده، از نامهای Enca (-e) و توصیفهای متنیِ گزارششده توسط Enca (-f) استفاده میکند:
| ASCII | 7bit ASCII characters |
| ISO-8859-2 | ISO 8859-2 standard; ISO Latin 2 |
| ISO-8859-4 | ISO 8859-4 standard; Latin 4 |
| ISO-8859-5 | ISO 8859-5 standard; ISO Cyrillic |
| ISO-8859-13 | ISO 8859-13 standard; ISO Baltic; Latin 7 |
| ISO-8859-16 | ISO 8859-16 standard |
| CP1125 | MS-Windows code page 1125 |
| CP1250 | MS-Windows code page 1250 |
| CP1251 | MS-Windows code page 1251 |
| CP1257 | MS-Windows code page 1257; WinBaltRim |
| IBM852 | IBM/MS code page 852; PC (DOS) Latin 2 |
| IBM855 | IBM/MS code page 855 |
| IBM775 | IBM/MS code page 775 |
| IBM866 | IBM/MS code page 866 |
| baltic | ISO-IR-179; Baltic |
| KEYBCS2 | Kamenicky encoding; KEYBCS2 |
| macce | Macintosh Central European |
| maccyr | Macintosh Cyrillic |
| ECMA-113 | Ecma Cyrillic; ECMA-113 |
| KOI-8_CS_2 | KOI8-CS2 code (`T602') |
| KOI8-R | KOI8-R Cyrillic |
| KOI8-U | KOI8-U Cyrillic |
| KOI8-UNI | KOI8-Unified Cyrillic |
| TeX | (La)TeX control sequences |
| UCS-2 | Universal character set 2 bytes; UCS-2; BMP |
| UCS-4 | Universal character set 4 bytes; UCS-4; ISO-10646 |
| UTF-7 | Universal transformation format 7 bits; UTF-7 |
| UTF-8 | Universal transformation format 8 bits; UTF-8 |
| CORK | Cork encoding; T1 |
| GBK | Simplified Chinese National Standard; GB2312 |
| BIG5 | Traditional Chinese Industrial Standard; Big5 |
| HZ | HZ encoded GB2312 |
| unknown | Unrecognized encoding |
که در آن unknown یک کدگذاری واقعی نیست، بلکه زمانی گزارش میشود که Enca قادر به ارائه پاسخ قابل اتکایی نباشد.
ابزار Enca تا حدی پشتیبانی آزمایشی از بهاصطلاح سطوح (surfaces) ارائه میدهد (پایین را ببینید). سطوح زیر را شناسایی میکند (همهٔ آنها برای تمام مجموعهنویسهها قابلاِعمال نیستند):
| /CR | پایاندهندههای خط CR |
| /LF | پایاندهندههای خط LF |
| /CRLF | پایاندهندههای خط CRLF |
| N.A. | پایاندهندههای خط ترکیبی |
| N.A. | احاطهشده با/درآمیخته با دادههای غیرمتنی |
| /21 | ترتیب بایت معکوسشده در جفتها (1,2 -> 2,1) |
| /4321 | ترتیب بایت معکوسشده در چهارتاییها (1,2,3,4 -> 4,3,2,1) |
| N.A. | تکههای پیوستهشده از هر دو نوع little و big endian |
| /qp | کدگذاریشده به صورت Quoted-printable |
توجه داشته باشید که برخی سطوح به جای شناسه دارای N.A. هستند--آنها را نمیتوان در خط فرمان مشخص کرد و تنها میتوانند توسط Enca گزارش شوند. این امر تعمدی است زیرا آنها به جای نمایش یک سطح واقعی، صرفاً به شما اطلاع میدهند که چرا فایل نمیتواند از نظر سطح سازگار (surface-consistent) در نظر گرفته شود.
هر مجموعهنویسه سطح طبیعی خود را دارد (که در recode به آن “ضمنی” یا “implied” گفته میشود) که گزارش نمیشود؛ برای نمونه، برای مجموعهنویسهٔ IBM 852، این سطح “پایاندهندههای خط CRLF” است. برای کدگذاریهای UCS، حالت big endian به عنوان سطح طبیعی در نظر گرفته میشود؛ ترتیب بایتهای غیرمعمول از جایگشتهای 21 و 4321 ساخته میشوند: 2143 صرفاً به صورت 21 گزارش میشود، در حالی که 3412 به عنوان ترکیبی از 4321 و 21 گزارش میشود.
کدگذاری مضاعف UTF-8 (به صورت Doubly-encoded UTF-8) نه مجموعهنویسه است و نه سطح، و صرفاً گزارش میشود.
دربارهٔ مجموعهنویسهها، کدگذاریها و سطوح (About charsets, encodings and surfaces)
مجموعهنویسه (Charset) مجموعهای از موجودیتهای نویسهای است، در حالی که کدگذاری (encoding) نمایش آن در قالب بایتها و بیتهاست. در Enca، واژهٔ encoding هممعنی با “نمایش متن” (“representation of text”) است؛ یعنی رابطهٔ بین توالی موجودیتهای نویسهای تشکیلدهندهٔ متن و توالی بایتهای (بیتهای) تشکیلدهندهٔ فایل.
بنابراین، کدگذاری هم مجموعهنویسه است و هم بهاصطلاح سطح (پایاندهندههای خط، ترتیب بایتها، نویسههای ترکیبی، تبدیل Base64 و غیره). با این وجود، کار با برخی جفتهای {charset,surface} مانند مجموعهنویسههای واقعی راحتتر است. بنابراین، همانند recode(1)، تمام کدگذاریهای -UCS و -UTF از مجموعهنویسهٔ جهانی (Universal character set) مجموعهنویسه نامیده میشوند. لطفاً برای جزئیات بیشتر در این باره، به مستندات recode مراجعه کنید.
تنها ویژگی خوب دربارهٔ سطوح این است: تا زمانی که شروع به دستکاری آنها نکنید، Enca نیز کاری با آنها نخواهد داشت و تا جای ممکن تلاش میکند مانند برنامهای ناآگاه از سطوح (surface-unaware) رفتار کند، حتی هنگام ارتباط با recode.
زبانها (LANGUAGES)
ابزار Enca برای کارکرد مطمئن، حداقل در مورد کدگذاریهای معمول ۸بیتی، باید زبان فایلهای ورودی را بداند. کدگذاریهای چندبایتی باید برای هر زبان لاتین، سیریلیک یا یونانی شناسایی شوند.
میتوانید (یا مجبورید) از گزینهٔ -L برای مشخص کردن زبان به Enca استفاده کنید. از آنجا که افراد بیشتر اوقات با فایلهایی به همان زبانی کار میکنند که لوکالهای خود را برای آن پیکربندی کردهاند، Enca تلاش میکند با بررسی مقدار LC_CTYPE و دیگر دستههای لوکال (لطفاً locale(7) را ببینید) و استفاده از آن برای زبان در زمانی که زبانی را مشخص نکردهاید، زبان را حدس بزند. البته این حدس ممکن است کاملاً اشتباه باشد و پاسخهایی بیپایه بدهد و به فایلهایتان آسیب بزند، بنابراین لطفاً استفاده از گزینهٔ -L را فراموش نکنید. همچنین میتوانید از متغیر محیطی ENCAOPT برای تنظیم یک زبان پیشفرض استفاده کنید (بخش محیط (ENVIRONMENT) را ببینید).
زبانهای زیر توسط Enca پشتیبانی میشوند (هر زبان همراه با کدگذاریهای ۸بیتیِ پشتیبانیشده فهرست شده است):
| Belarusian | CP1251 IBM866 ISO-8859-5 KOI8-UNI maccyr IBM855 |
| Bulgarian | CP1251 ISO-8859-5 IBM855 maccyr ECMA-113 |
| Czech | ISO-8859-2 CP1250 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK |
| Estonian | ISO-8859-4 CP1257 IBM775 ISO-8859-13 macce baltic |
| Finnish | ISO-8859-4 CP1257 |
| Croatian | CP1250 ISO-8859-2 IBM852 macce CORK |
| Hungarian | ISO-8859-2 CP1250 IBM852 macce CORK |
| Lithuanian | CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic |
| Latvian | CP1257 ISO-8859-4 IBM775 ISO-8859-13 macce baltic |
| Polish | ISO-8859-2 CP1250 IBM852 macce ISO-8859-13 ISO-8859-16 baltic CORK |
| Russian | KOI8-R CP1251 ISO-8859-5 IBM866 maccyr |
| Slovak | CP1250 ISO-8859-2 IBM852 KEYBCS2 macce KOI-8_CS_2 CORK |
| Slovene | ISO-8859-2 CP1250 IBM852 macce CORK |
| Ukrainian | CP1251 IBM855 ISO-8859-5 CP1125 KOI8-U maccyr |
| Chinese | GBK BIG5 HZ |
| none |
زبان ویژهٔ none را میتوان به صورت خلاصه به عنوان __ به کار برد؛ این زبان حاوی هیچ کدگذاری ۸بیتی نیست، بنابراین تنها کدگذاریهای چندبایتی شناسایی میشوند.
همچنین میتوانید به جای زبانها از نامهای محلی (locale) استفاده کنید:
| Belarusian | be |
| Bulgarian | bg |
| Czech | cs |
| Estonian | et |
| Finnish | fi |
| Croatian | hr |
| Hungarian | hu |
| Lithuanian | lt |
| Latvian | lv |
| Polish | pl |
| Russian | ru |
| Slovak | sk |
| Slovene | sl |
| Ukrainian | uk |
| Chinese | zh |
چندین ویژگی Enca به آنچه در سیستم شما در دسترس است و نحوهٔ کامپایل آن بستگی دارد. میتوانید فهرست آنها را با
enca --version
به دست آورید. علامت مثبت پیش از نام یک ویژگی به معنای در دسترس بودن آن است و علامت منفی نشان میدهد که این ساخت فاقد آن ویژگی خاص است.
librecode-interface. برنامهٔ Enca دارای واسطی برای توابع تبدیل مجموعهنویسه در کتابخانهٔ GNU recode است.
iconv-interface. برنامهٔ Enca دارای واسطی برای توابع تبدیل مجموعهنویسهٔ UNIX98 iconv است.
external-converter. برنامهٔ Enca میتواند از برنامههای تبدیل خارجی استفاده کند (در صورتی که برنامهٔ مناسبی نصب شده باشد).
language-detection. برنامهٔ Enca تلاش میکند زبان (-L) را از روی لوکالها حدس بزند. دستکم در تئوری، به گزینهٔ --language نیازی نخواهید داشت.
locale-alias. برنامهٔ Enca قادر است نامهای مستعار لوکال را که برای نامهای زبان استفاده میشوند، رمزگشایی و بازشناسی کند.
target-charset-auto. برنامهٔ Enca تلاش میکند مجموعهنویسهٔ ترجیحی شما را از لوکالها تشخیص دهد. گزینهٔ --auto-convert و فراخوانی Enca بهصورت enconv دستکم از نظر تئوری کار میکند.
ENCAOPT. برنامهٔ Enca قادر است این متغیر محیطی را پیش از پارامترهای خط فرمان بهدرستی تجزیه کند. موارد سادهای مانند ENCAOPT="-L uk" حتی بدون این ویژگی نیز کار خواهند کرد.
محیط (ENVIRONMENT)
متغیر ENCAOPT میتواند مجموعهای از گزینههای پیشفرض Enca را در خود نگه دارد. محتوای آن پیش از آرگومانهای خط فرمان تفسیر میشود. متأسفانه این ویژگی در همهجا کار نمیکند (باید ویژگی +ENCAOPT وجود داشته باشد).
متغیرهای LC_CTYPE، LC_COLLATE و LC_MESSAGES (که احتمالاً از LC_ALL یا LANG به ارث رسیدهاند) برای حدس زدن زبان شما استفاده میشوند (باید ویژگی +language-detection وجود داشته باشد).
متغیر DEFAULT_CHARSET میتواند توسط enconv به عنوان مجموعهنویسهٔ هدف پیشفرض استفاده شود.
خطاها (DIAGNOSTICS)
برنامهٔ Enca زمانی که تمامی فایلهای ورودی با موفقیت پردازش شوند کد خروج 0 را برمیگرداند (یعنی تمام کدگذاریها شناسایی شده و در صورت درخواست تبدیل، همهٔ فایلها به کدگذاری خواستهشده تبدیل شده باشند). کد خروج 1 زمانی بازگردانده میشود که Enca نتواند کدگذاری فایلی را تشخیص دهد یا تبدیل را روی فایل ورودی انجام دهد، چرا که به اندازهٔ کافی هوشمند نیست. کد خروج 2 در صورت بروز مشکلات جدی (مانند خطاهای I/O) برگردانده میشود.
امنیت (SECURITY)
قاعدتاً باید این امکان وجود داشته باشد که اجازه دهیم Enca بدون نظارت کار کند؛ این هدف آن است. با این حال:
هیچ تضمینی وجود ندارد که تشخیص بهصورت ۱۰۰٪ کار کند. به آن تکیه نکنید، زیرا ممکن است دادههای ارزشمند خود را به سادگی از دست بدهید.
از enca (برنامهٔ اجرایی) استفاده نکنید؛ اگر چیزی میخواهید که شبیه به امنیت باشد، در عوض به libenca پیوند برقرار کنید. در این صورت باید تبدیل نهایی را خودتان انجام دهید.
از مبدلهای خارجی استفاده نکنید. در حالت ایدهآل، آنها را در زمان کامپایل غیرفعال کنید.
مراقب ENCAOPT و تمام حدسهای خودکار درونی که موارد مختلف را از متغیرهای محیطی، بهویژه لوکالها استخراج میکنند، باشید.
autoconvert(1), cstocs(1), file(1), iconv(1), iconv(3), nl_langinfo(3), map(1), piconv(1), recode(1), locale(5), locale(7), ltt(1), umap(1), unicode(7), utf-8(7), xcode(1)
باگهای شناختهشده (KNOWN BUGS)
این برنامه باگهای ناشناخته بسیار زیادی دارد.
ایده استفاده از مقدار LC_* برای تعیین زبان مسلماً احمقانه است. با این حال من آن را دوست دارم.
این برنامه پیش از دستکاری فایلها، نمیتواند از آنها نسخه پشتیبان تهیه کند.
در شرایطی خاص، ممکن است روی سیستمهای فایل >31bit و/یا از طریق NFS رفتاری نادرست داشته باشد (هر دو آزمایشنشده هستند، اما در عمل نباید مشکلی ایجاد کنند).
مبدل داخلی، نویسه `ch' را از KOI8-CS2 تبدیل نمیکند، و احتمالاً برخی نویسههای دیگر را نیز که در هر صورت احتمالاً هرگز نامشان را نشنیدهاید.
تشخیص نوع EOL روی فایلهای با کدگذاری Quoted-printable ضعیف عمل میکند. این مورد باید روزی برطرف شود.
هیچ گزینه خط فرمانی برای تنظیم پارامترهای libenca وجود ندارد. این موضوع عمدی است (Enca باید همان کاری را که منظور است انجام دهد - DWIM) اما گاهی مایه دردسر است.
این صفحه راهنما بیش از حد طولانی است، بهویژه این بخش. البته اهمیتی ندارد، چرا که هیچکس آن را نمیخواند.
گزارشهای باگ را به https://github.com/nijel/enca/issues ارسال کنید.
دانستنیها (TRIVIA)
برنامه Enca سرنام Extremely Naive Charset Analyser است. با این وجود، عبارت `enc' در اصل از `encoding' آمده است، بنابراین `e' آغازین باید همانند `encoding' خوانده شود، نه همانند `extreme'.
نویسندگان (AUTHORS)
David Necas (Yeti) <yeti@physics.muni.cz>
Michal Cihar <michal@cihar.com>
دادههای Unicode از منابع برخط (آزاد) گوناگون یا با استفاده از GNU recode تولید شدهاند. دادههای آماری از متون مختلف در اینترنت به دست آمده است، امیدوارم شمارش نویسهها کپیرایت کسی را نقض نکند.
قدردانیها (ACKNOWLEDGEMENTS)
لطفاً فایل THANKS را در توزیع برنامه بررسی کنید.
کپیرایت و تکثیر (COPYRIGHT)
Copyright (C) 2000-2003 David Necas (Yeti).
Copyright (C) 2009 Michal Cihar <michal@cihar.com>.
برنامه Enca یک نرمافزار آزاد است؛ شما میتوانید آن را تحت شرایط نسخه ۲ از مجوز عمومی همگانی گنو (GNU General Public License) همانطور که توسط بنیاد نرمافزارهای آزاد منتشر شده است، بازتوزیع کرده و/یا تغییر دهید.
برنامه Enca با این امید که مفید باشد توزیع شده است، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی قابل فروش بودن یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر به مجوز عمومی همگانی گنو مراجعه کنید.
شما باید به همراه Enca یک نسخه از مجوز عمومی همگانی گنو را دریافت کرده باشید؛ در غیر این صورت، به نشانی Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA نامه بنویسید.
| Sep 2009 | enca 1.11 |