یونیکد یک استاندارد بین المللی رمزگذاری کاراکتر است که اجازه می دهد متون به طور یکنواخت در هر کامپیوتری در جهان نمایش داده شوند، صرف نظر از زبان سیستم مورد استفاده در آن.
مبانی
برای درک اینکه جدول کاراکترهای یونیکد برای چیست، اجازه دهید ابتدا مکانیسم نمایش متن روی صفحه نمایشگر را درک کنیم. همانطور که می دانیم کامپیوتر تمام اطلاعات موجود را پردازش می کند فرم دیجیتال، و برای نمایش آن برای درک صحیح توسط شخص باید به صورت گرافیکی باشد. بنابراین، برای خواندن این متن، باید حداقل دو مشکل را حل کنیم:
- رمزگذاری کاراکترهای چاپ شدهبه شکل دیجیتال
- سیستم عامل را فعال کنید تا مطابقت داشته باشد فرم دیجیتالبا کاراکترهای برداری، به عبارت دیگر، حروف صحیح را پیدا کنید.
اولین کدگذاری ها
جد همه رمزگذاری ها ASCII آمریکایی در نظر گرفته می شود. موارد استفاده شده در آن را تشریح کرد زبان انگلیسیالفبای لاتین با علائم نگارشی و اعداد عربی. این 128 کاراکتر به کار رفته در آن بود که پایه ای برای پیشرفت های بعدی شد - حتی جدول کاراکترهای یونیکد مدرن از آنها استفاده می کند. از آن زمان، حروف الفبای لاتین اولین موقعیت ها را در هر رمزگذاری اشغال کرده اند.
در کل، ASCII امکان ذخیره 256 کاراکتر را فراهم کرد، اما از آنجایی که 128 کاراکتر اول توسط الفبای لاتین اشغال شده بود، 128 کاراکتر باقی مانده شروع به استفاده در سراسر جهان برای ایجاد استانداردهای ملی کردند. به عنوان مثال، در روسیه، CP866 و KOI8-R بر اساس آن ایجاد شد. چنین تغییراتی نسخه های توسعه یافته ASCII نامیده می شدند.
صفحات کد و "krakozyabry"
پیشرفتهای بعدیفناوری و ظهور یک رابط گرافیکی منجر به ایجاد کدگذاری ANSI توسط مؤسسه استاندارد آمریکا شد. کاربران روسی، به خصوص با تجربه، نسخه او تحت عنوان شناخته شده است نام ویندوز 1251. مفهوم «صفحه کد» برای اولین بار در آن به کار رفت. با کمک صفحات کد حاوی نمادهای الفبای ملی به غیر از لاتین بود که "درک متقابل" بین رایانه های مورد استفاده در کشورهای مختلف ایجاد شد.
با این حال، حضور تعداد زیادیرمزگذاری های مختلف مورد استفاده برای یک زبان شروع به ایجاد مشکل کردند. به اصطلاح کراکوزیابری ظاهر شد. آنها از عدم تطابق بین صفحه کد اصلی که در آن اطلاعات ایجاد شده و صفحه کدی که به طور پیش فرض در رایانه کاربر نهایی استفاده می شود، به وجود آمدند.
به عنوان مثال، موارد فوق کدهای سیریلیک CP866 و KOI8-R. حروف در آنها در موقعیت کد و اصول قرار دادن متفاوت بود. در اولی آنها مرتب شده بودند به ترتیب حروف الفبا، و در دوم - در دلخواه. می توانید تصور کنید که در مقابل چشمان کاربری که سعی کرده چنین متنی را بدون داشتن صفحه کد صحیح باز کند یا کامپیوتر آن را اشتباه تعبیر کرده است، چه می گذرد.
ایجاد یونیکد
گسترش اینترنت و فناوری های مرتبط مانند پست الکترونیک، منجر به این واقعیت شد که در نهایت وضعیت تحریف متون از بین رفت. شرکت های پیشرو فناوری اطلاعات کنسرسیوم یونیکد ("کنسرسیوم یونیکد") را تشکیل دادند. جدول کاراکترهایی که او در سال 1991 با نام UTF-32 معرفی کرد، امکان ذخیره بیش از یک میلیارد کاراکتر منحصر به فرد را فراهم کرد. این بود گام اصلیدر راه رمزگشایی متون
با این حال، اولین جدول کد کاراکتر جهانی Unicode UTF-32 محبوبیت زیادی به دست نیاورد. دلیل اصلی، اضافی بودن اطلاعات ذخیره شده بود. به سرعت محاسبه شد که برای کشورهایی که از الفبای لاتین کدگذاری شده با جدول جهانی جدید استفاده می کنند، متن چهار برابر بیشتر از استفاده از جدول ASCII توسعه یافته فضایی را اشغال می کند.
توسعه یونیکد
جدول کاراکترهای یونیکد UTF-16 زیر این مشکل را برطرف کرده است. رمزگذاری در آن با نصف تعداد بیت ها انجام شد، اما در همان زمان، تعداد ترکیب های ممکن نیز کاهش یافت. به جای میلیاردها کاراکتر، تنها 65536 کاراکتر ذخیره می کند، با این وجود، آنقدر موفق بود که این تعداد، طبق تصمیم کنسرسیوم، به عنوان فضای ذخیره سازی اولیه برای کاراکترهای یونیکد تعیین شد.
با وجود این موفقیت، UTF-16 برای همه مناسب نبود، زیرا مقدار ذخیره شده و اطلاعات منتقل شدههنوز دو برابر شده است راه حل یک مرحله ایبه UTF-8 تبدیل شد، جدول کاراکترهای یونیکد با طول متغیر. این را می توان یک پیشرفت در این زمینه نامید.
بنابراین، با معرفی دو استاندارد اخیر، جدول کاراکتر یونیکد مشکل یک فضای کد واحد را برای تمام فونتهای مورد استفاده در حال حاضر حل کرده است.
یونیکد برای روسی
با تشکر از طول متغیرکدی که برای نمایش کاراکترها استفاده می شود، الفبای لاتین در یونیکد به همان روشی که در ASCII اولیه آن کدگذاری می شود، یعنی با یک بیت رمزگذاری می شود. برای سایر حروف الفبا، تصویر ممکن است متفاوت به نظر برسد. به عنوان مثال، کاراکترهای الفبای گرجی از سه بایت برای رمزگذاری استفاده می کنند و کاراکترهای الفبای سیریلیک از دو بایت استفاده می کنند. همه اینها در چارچوب استفاده از استاندارد UTF-8 Unicode (جدول کاراکترها) امکان پذیر است. زبان روسی یا الفبای سیریلیک 448 موقعیت را در فضای کد مشترک اشغال می کند که به پنج بلوک تقسیم می شود.
این پنج بلوک شامل الفبای سیریلیک و اسلاو کلیسایی و همچنین حروف اضافیزبان های دیگر با استفاده از الفبای سیریلیک. تعدادی موقعیت برای نمایش اشکال قدیمی نمایش حروف سیریلیک اختصاص داده شده است و 22 موقعیت از مجموع فعلاً آزاد هستند.
نسخه فعلی یونیکد
کنسرسیوم با حل وظیفه اصلی خود که استانداردسازی فونت ها و ایجاد فضای کد واحد برای آنها بود، دست از کار خود برنداشت. یونیکد دائما در حال توسعه و گسترش است. آخرین نسخه فعلی این استاندارد 9.0 در سال 2016 منتشر شد. این شامل شش الفبای اضافی بود و لیست ایموجی های استاندارد شده را گسترش داد.
باید بگویم که برای ساده سازی تحقیق، حتی زبان های به اصطلاح مرده نیز به یونیکد اضافه می شوند. آنها این نام را به این دلیل گرفتند که مردمی وجود ندارند که او بومی باشد. این گروه همچنین شامل زبانهایی میشود که تنها در قالب آثار مکتوب به زمان ما رسیدهاند.
در اصل، هر کسی می تواند برای افزودن کاراکتر به مشخصات جدید یونیکد درخواست دهد. درست است، برای این شما باید مقدار مناسبی از اسناد منبع را پر کنید و زمان زیادی را صرف کنید. نمونه زنده این ماجرا داستان برنامه نویس ترنس ادن است. وی در سال 2013 درخواستی را برای درج در مشخصات نمادهای مربوط به تعیین دکمه های کنترل پاور کامپیوتر ارائه کرد. که در مستندات فنیآنها از اواسط دهه 1970 مورد استفاده قرار گرفتند، اما تا قبل از مشخصات 9.0 بخشی از یونیکد نبودند.
جدول نمادها
هر رایانه، صرف نظر از سیستم عامل مورد استفاده، از جدول کاراکترهای یونیکد استفاده می کند. چگونه می توان از این جداول استفاده کرد، از کجا آنها را پیدا کرد و چرا می توانند برای یک کاربر معمولی مفید باشند؟
سیستم عامل میز ویندوزنمادها در بخش "ابزار" منو قرار دارد. در خانواده اتاق عمل سیستم های لینوکسمعمولاً می توان آن را در زیربخش "Standard" و در MacOS - در تنظیمات صفحه کلید پیدا کرد. هدف اصلی این جدول ورود است اسناد متنیکاراکترهایی که روی صفحه کلید قرار ندارند.
برنامه برای چنین جداول را می توان گسترده ترین یافت: از ورودی نمادهای فنی و نمادهای ملی سیستم های پولیقبل از نوشتن دستورالعمل کاربرد عملیکارت های تاروت.
سرانجام
یونیکد در همه جا استفاده می شود و همراه با توسعه اینترنت و فناوری های موبایل وارد زندگی ما شد. به لطف استفاده از آن، سیستم ارتباطات بین قومی به طور قابل توجهی ساده شده است. می توان گفت که معرفی یونیکد یک نمونه قابل توجه، اما کاملاً نامرئی از استفاده از فناوری برای منافع عمومی همه بشریت است.
یونیکد: UTF-8، UTF-16، UTF-32.
یونیکد یک مجموعه است نمادهای گرافیکیو نحوه کدگذاری آنها برای پردازش کامپیوتریداده های متنی
یونیکد نه تنها هر کاراکتر را اختصاص می دهد کد منحصر به فرد، بلکه تعریف می کند ویژگی های مختلفاین شخصیت مثلا:
نوع کاراکتر (بزرگ، حروف کوچک، عدد، علامت نقطه گذاری و غیره)؛
ویژگی های کاراکتر (نمایش از چپ به راست یا راست به چپ، فاصله، شکست خط و غیره)؛
حروف بزرگ یا کوچک مربوطه (برای حروف کوچک و حروف بزرگبه ترتیب)؛
متناظر مقدار عددی(برای کاراکترهای عددی).
استانداردها UTF(مخفف Unicode Transformation Format) برای نشان دادن کاراکترها:
UTF-16: در راه اندازی ویندوز، شتاب، سوالات متداول ویستا برای ارائه همه کاراکترهای یونیکداز رمزگذاری UTF-16 استفاده شده است. در UTF-16، کاراکترها با دو بایت (16 بیت) نشان داده می شوند. این رمزگذاری در ویندوز استفاده می شود زیرا مقادیر 16 بیتی می توانند کاراکترهایی را نشان دهند که حروف الفبای اکثر زبان های جهان را تشکیل می دهند، این به برنامه ها اجازه می دهد تا رشته ها را سریعتر پردازش کرده و طول آنها را محاسبه کنند. با این حال، 16 بیت برای نشان دادن حروف الفبا در برخی از زبان ها کافی نیست. برای چنین مواردی، UTE-16 از رمزگذاری های "جانشین" پشتیبانی می کند و به کاراکترها اجازه می دهد در 32 بیت (4 بایت) کدگذاری شوند. با این حال، برنامههای کاربردی کمی وجود دارند که باید با کاراکترهای چنین زبانهایی سروکار داشته باشند، بنابراین UTF-16 یک سازش خوب بین صرفهجویی در حافظه و سهولت برنامهنویسی است. توجه داشته باشید که در .NET Framework همه کاراکترها با استفاده از UTF-16 کدگذاری می شوند، بنابراین از UTF-16 در برنامه های کاربردی ویندوزعملکرد را بهبود می بخشد و مصرف حافظه را هنگام عبور رشته ها بین کدهای بومی و مدیریت شده کاهش می دهد.
UTF-8: در رمزگذاری UTF-8، کاراکترهای مختلف را می توان با 1،2،3 یا 4 بایت نشان داد. کاراکترهای با مقادیر کمتر از 0x0080 به 1 بایت فشرده می شوند که برای کاراکترهای آمریکایی بسیار راحت است. کاراکترهایی که با مقادیر در محدوده 0x0080-0x07FF مطابقت دارند به مقادیر 2 بایتی تبدیل می شوند که با الفبای اروپایی و خاورمیانه به خوبی کار می کند. کاراکترهایی با مقادیر بزرگتر به مقادیر 3 بایتی تبدیل می شوند که هنگام کار با زبان های آسیای مرکزی راحت است. در نهایت، جفت های "جانشین" در قالب 4 بایت نوشته می شوند. UTF-8 یک رمزگذاری بسیار محبوب است. با این حال، اگر اغلب از کاراکترهایی با مقادیر 0x0800 یا بالاتر استفاده شود، نسبت به UTF-16 مؤثر است.
UTF-32: در UTF-32 همه کاراکترها با 4 بایت نمایش داده می شوند. این رمزگذاری برای نوشتن راحت است الگوریتم های سادهبرای برشمردن کاراکترهای هر زبانی که نیازی به پردازش کاراکترهای نمایش داده شده با تعداد متفاوت بایت ندارند. به عنوان مثال، هنگام استفاده از UTF-32، می توانید "جانشین ها" را فراموش کنید، زیرا هر کاراکتر در این رمزگذاری با 4 بایت نمایش داده می شود. واضح است که UTF-32 از نظر استفاده از حافظه با ایده آل فاصله زیادی دارد. بنابراین، این رمزگذاری به ندرت برای انتقال رشته ها در شبکه و ذخیره آنها در فایل ها استفاده می شود. به عنوان یک قاعده، UTF-32 به عنوان یک قالب داخلی برای نمایش داده ها در یک برنامه استفاده می شود.
UTF-8
در آینده نزدیک بیشتر و بیشتر نقش مهمفرمت یونیکد (و ISO 10646) ویژه ای به نام پخش می کند UTF-8. این رمزگذاری «مشتق» از رشتههای بایت با طولهای مختلف (از یک تا شش) برای نوشتن کاراکترها استفاده میکند که با استفاده از یک الگوریتم ساده، با رشتههای کوتاهتر مربوط به کاراکترهای رایجتر، به کدهای یونیکد تبدیل میشوند. مزیت اصلی این فرمت سازگاری با ASCII نه تنها از نظر مقادیر کد، بلکه از نظر تعداد بیت در هر کاراکتر است، زیرا یک بایت برای رمزگذاری هر یک از 128 کاراکتر اول در UTF-8 کافی است (اگرچه، به عنوان مثال، حروف سیریلیک به دو بایت نیاز دارند).
فرمت UTF-8 در 2 سپتامبر 1992 توسط Ken Thompson و Rob Pike اختراع شد و در پلان 9 پیاده سازی شد. اکنون استاندارد UTF-8 به طور رسمی در اسناد RFC 3629 و ISO / IEC 10646 Annex D گنجانده شده است.
برای طراح وباین رمزگذاری از اهمیت ویژه ای برخوردار است زیرا از نسخه 4 به عنوان "رمزگذاری سند استاندارد" در HTML اعلام شده است.
متنی که فقط از کاراکترهایی با عدد کمتر از 128 تشکیل شده است، وقتی در UTF-8 نوشته شود، تبدیل می شود. متن ساده ASCII. برعکس، در متن UTF-8، هر بایتی با مقدار کمتر از 128 نشان دهنده یک کاراکتر ASCII با همان کد است. کاراکترهای یونیکد باقیمانده بهعنوان دنبالههایی به طول 2 تا 6 بایت نمایش داده میشوند (در واقع فقط حداکثر تا 4 بایت، زیرا کدهای بزرگتر از 221 برنامهریزی نشدهاند)، که در آنها اولین بایت همیشه 11xxxxxx و بقیه 10xxxxxx هستند.
به زبان ساده، در قالب UTF-8، حروف لاتین، علائم نگارشی و کنترل کاراکترهای اسکیدر کدهای US-ASCII نوشته شدهاند و همه کاراکترهای دیگر با استفاده از اکتتهای متعدد با مهمترین بیت ۱ کدگذاری میشوند. این دو اثر دارد.
حتی اگر برنامه یونیکد را تشخیص ندهد، پس نامه ها، اعداد عربی و علائم نگارشی به درستی نمایش داده می شوند.
در صورتی که حروف لاتین و ساده ترین علائم نگارشی (از جمله فضا) مقدار قابل توجهی از متن را اشغال کنند، UTF-8 در مقایسه با UTF-16 افزایش حجم می دهد.
در نگاه اول، ممکن است به نظر برسد که UTF-16 راحت تر است، زیرا اکثر کاراکترهای موجود در آن دقیقاً در دو بایت کدگذاری می شوند. با این حال، نیاز به پشتیبانی از جفتهای جایگزین که اغلب هنگام استفاده از UTF-16 فراموش میشوند و تنها از کاراکترهای UCS-2 پشتیبانی میکنند، این موضوع را نفی میکند.
این استاندارد در سال 1991 توسط سازمان غیرانتفاعی Unicode Consortium (English Unicode Consortium, Unicode Inc.) پیشنهاد شد. استفاده از این استاندارد امکان رمزگذاری بسیار را فراهم می کند عدد بزرگکاراکترهای اسکریپت های مختلف: اسناد یونیکد می توانند با نویسه های چینی همزیستی داشته باشند، نمادهای ریاضی، حروف الفبای یونانی، لاتین و سیریلیک، در حالی که تعویض صفحات کد غیر ضروری می شود.
این استاندارد از دو بخش اصلی تشکیل شده است: مجموعه کاراکترهای جهانی (UCS، مجموعه کاراکترهای جهانی) و خانواده کدگذاری (UTF، فرمت تبدیل یونیکد). مجموعه کاراکترهای جهانی مطابقت یک به یک کاراکترها با کدها را مشخص می کند - عناصر فضای کد که اعداد صحیح غیر منفی را نشان می دهند. یک خانواده کدگذاری نمایش ماشین دنباله ای از کدهای UCS را تعریف می کند.
استاندارد یونیکد با هدف ایجاد رمزگذاری یک کاراکتر برای همه زبانهای نوشتاری مدرن و باستانی ایجاد شد. هر کاراکتر در این استاندارد با 16 بیت کدگذاری شده است که به آن امکان پوشش غیرقابل مقایسه را می دهد مقدار زیادکاراکترها نسبت به رمزگذاری های 8 بیتی پذیرفته شده قبلی. یکی دیگر تفاوت مهمتفاوت یونیکد با سایر سیستم های رمزگذاری در این است که نه تنها یک کد منحصر به فرد به هر کاراکتر اختصاص می دهد، بلکه ویژگی های مختلفی از آن کاراکتر را نیز تعریف می کند، به عنوان مثال:
نوع کاراکتر (حرف بزرگ، حرف کوچک، عدد، علامت نقطه گذاری و غیره)؛
ویژگی های کاراکتر (نمایش از چپ به راست یا راست به چپ، فاصله، شکست خط و غیره)؛
حروف بزرگ یا کوچک مربوطه (به ترتیب برای حروف کوچک و بزرگ)؛
مقدار عددی مربوطه (برای کاراکترهای عددی).
کل محدوده کدها از 0 تا FFFF به چندین زیرمجموعه استاندارد تقسیم می شود که هر کدام مربوط به الفبای یک زبان یا یک گروه است. شخصیت های خاصاز نظر عملکرد مشابه هستند. نمودار زیر شامل یک لیست کلی از زیر مجموعه های یونیکد 3.0 است (شکل 2).
شکل 2
استاندارد یونیکد اساس ذخیره سازی و متن در بسیاری از موارد مدرن است سیستم های کامپیوتری. با این حال، با اکثر پروتکلهای اینترنتی سازگار نیست، زیرا کدهای آن میتوانند حاوی هر مقدار بایت باشند و پروتکلها معمولاً از بایتهای 00 - 1F و FE - FF به عنوان بایت سرویس استفاده میکنند. برای دستیابی به سازگاری، چندین فرمت تبدیل یونیکد (UTFs، Unicode Transformation Formats) ایجاد شده است که امروزه رایج ترین آنها UTF-8 است. این قالب تعریف می کند قوانین زیرتبدیل هر کد یونیکد به مجموعه ای از بایت (از یک تا سه) مناسب برای انتقال توسط پروتکل های اینترنتی.
در اینجا x,y,z بیتهای کد منبع را نشان میدهند که باید از کوچکترین استخراج شوند و از راست به چپ در بایتهای نتیجه وارد شوند تا تمام موقعیتهای مشخص شده پر شوند.
توسعه بیشتر استاندارد یونیکد با افزودن سطوح زبانی جدید همراه است. کاراکترهایی در محدوده 10000 - 1FFFF، 20000 - 2FFFF، و غیره، که در آن قرار است رمزگذاری برای اسکریپت های زبان های مرده که در جدول بالا گنجانده نشده اند را شامل شود. برای رمزگذاری این کاراکترهای اضافی توسعه داده شد فرمت جدید UTF-16.
بنابراین، 4 روش اصلی برای رمزگذاری بایت ها در قالب یونیکد وجود دارد:
UTF-8: 128 کاراکتر کدگذاری شده در یک بایت (فرمت ASCII)، 1920 کاراکتر کدگذاری شده در 2 بایت ((رومی، یونانی، سیریلیک، قبطی، ارمنی، عبری، عربی)، 63488 کاراکتر رمزگذاری شده در 3 بایت (چینی، ژاپنی و غیره) .) 2،147،418،112 کاراکتر باقیمانده (هنوز استفاده نشده است) را می توان با 4، 5، یا 6 بایت کدگذاری کرد.
UCS-2: هر کاراکتر با 2 بایت نمایش داده می شود. این رمزگذاری فقط شامل 65535 کاراکتر اول از قالب یونیکد است.
UTF-16: این افزونه UCS-2 است و شامل 1,114,112 کاراکتر یونیکد است. 65535 کاراکتر اول با 2 بایت و بقیه با 4 بایت نمایش داده می شوند.
USC-4: هر کاراکتر با 4 بایت کدگذاری می شود.
باور کنید یا نه، یک فرمت تصویر در مرورگر تعبیه شده است. این فرمت به شما امکان می دهد تصاویر را قبل از نیاز دانلود کنید، رندر تصویر را در حالت عادی یا صفحه نمایش شبکیه چشمو به شما اجازه می دهد که اضافه کنید تصاویر css. خوب، این کاملا درست نیست. این یک قالب تصویری نیست، اگرچه همه چیزهای دیگر هنوز معتبر هستند. با استفاده از آن، میتوانید آیکونهای مستقل از وضوح ایجاد کنید که بارگذاری آن زمان نمیبرد و قابل استایل هستند با استفاده از CSS.
یونیکد چیست؟
یونیکد توانایی نمایش صحیح حروف و علائم نگارشی است زبان های مختلفدر یک صفحه این فوق العاده مفید است: کاربران می توانند در سراسر جهان با سایت شما کار کنند و آنچه را که می خواهید نشان می دهد - می تواند فرانسوی با دیاکریتیک یا کانجی باشد.
یونیکد به تکامل خود ادامه می دهد: نسخه فعلی 8.0 است که بیش از 120 هزار کاراکتر دارد (در مقاله اصلی منتشر شده در اوایل سال 2014، در مورد نسخه 6.3 و 110 هزار کاراکتر بود).
علاوه بر حروف و اعداد، کاراکترها و نمادهای دیگری نیز در یونیکد وجود دارد. که در آخرین نسخه هااین شامل ایموجیها بود که میتوانید در پیامرسان iOS مشاهده کنید.
صفحات HTML از دنباله ای از کاراکترهای یونیکد ایجاد می شوند و هنگام ارسال از طریق شبکه به بایت تبدیل می شوند. هر حرف و نماد هر زبانی کد منحصر به فرد خود را دارد و زمانی که فایل ذخیره می شود کدگذاری می شود.
هنگام استفاده از سیستم رمزگذاری UTF-8، می توانید مستقیماً کاراکترهای یونیکد را در متن وارد کنید، اما همچنین می توانید با تعیین یک پیوند نمادین عددی، کاراکترهای یونیکد را به متن اضافه کنید. به عنوان مثال، این یک نماد قلب است و شما می توانید این نماد را به سادگی با افزودن کد به نشانه گذاری نمایش دهید.
این مرجع عددی را می توان در دو قالب اعشاری و هگزادسیمال مشخص کرد. فرمت اعشاری نیاز دارد که حرف x در ابتدا اضافه شود، ورودی همان قلب ( ) را نشان می دهد نسخه پیشین. (2665 نسخه هگزادسیمال 9829 است).
اگر یک کاراکتر یونیکد را با CSS اضافه می کنید، فقط می توانید از مقادیر هگزادسیمال استفاده کنید.
برخی از نویسههای رایجتر یونیکد به جای کدهای عددی، نامهای متنی یا اختصارات به یاد ماندنیتری دارند، مانند علامت علامت (& - &). چنین نمادهایی نامیده می شوند یادگاری در HTML، لیست کامل آنها در ویکی پدیا است.
چرا باید از یونیکد استفاده کنید؟
سؤال خوبی بود، در اینجا چند دلیل وجود دارد:
- برای استفاده از کاراکترهای صحیح از زبانهای مختلف.
- برای جایگزینی آیکون ها
- برای جایگزینی نمادهای متصل شده از طریق @font-face.
- برای تنظیم کلاس های CSS
شخصیت های صحیح
دلیل اول نیازی به هیچ کدام ندارد اقدامات اضافی. اگر HTML در قالب UTF-8 ذخیره شود و رمزگذاری آن به عنوان UTF-8 از طریق شبکه منتقل شود، همه چیز باید همانطور که باید کار کند.
باید. متأسفانه، همه مرورگرها و دستگاه ها همه کاراکترهای یونیکد را به یک شکل پشتیبانی نمی کنند (به طور دقیق تر، همه فونت ها پشتیبانی نمی کنند. مجموعه کاملشخصیت ها). به عنوان مثال، کاراکترهای ایموجی جدید در همه جا پشتیبانی نمی شوند.
برای پشتیبانی از UTF-8 در HTML5 اضافه کنید (اگر به تنظیمات سرور دسترسی ندارید، باید اضافه کنید ). نوع قدیمی از ( ).
نمادها
دلیل دوم استفاده از یونیکد این است که کاراکترهای مفید زیادی وجود دارد که می توان از آنها به عنوان آیکون استفاده کرد. به عنوان مثال،، ≡ و.
مزیت آشکار آنها این است که شما به هیچ کدام نیاز ندارید فایل های اضافیبرای اضافه کردن آنها به صفحه، به این معنی که سایت شما سریعتر خواهد بود. همچنین می توانید رنگ آنها را تغییر دهید یا با CSS سایه اضافه کنید. و اضافه کردن انتقال ( انتقال css) می توانید به آرامی رنگ نماد را هنگامی که ماوس را روی آن قرار می دهید بدون هیچ گونه تغییری تغییر دهید تصاویر اضافی.
فرض کنید میخواهم یک نشانگر رتبهبندی با ستارهها در صفحهام قرار دهم. من می توانم این کار را انجام دهم:
★ ★ ★ ☆ ☆
نتیجه زیر را دریافت خواهید کرد:
اما اگر بدشانس باشید، چیزی شبیه به این را خواهید دید:
امتیاز مشابه در BlackBerry 9000
این اتفاق می افتد اگر کاراکترهای استفاده شده در فونت مرورگر یا دستگاه نباشند (خوشبختانه، این ستاره ها به خوبی پشتیبانی می شوند و قدیمی هستند. گوشی های بلک بریدر اینجا تنها استثنا هستند).
اگر کاراکتر یونیکد وجود نداشته باشد، می توان آن را با کاراکترهایی از مربع خالی (□) تا الماس با علامت سوال (�) جایگزین کرد.
اما چگونه یک کاراکتر یونیکد را پیدا کنید که ممکن است برای استفاده در طراحی شما مناسب باشد؟ شما می توانید آن را در سایتی مانند Unicodinator با نگاه کردن به کاراکترهای موجود جستجو کنید، اما وجود دارد بهترین راه. - این سایت عالی به شما امکان می دهد نمادی را که به دنبال آن هستید بکشید و سپس لیستی از کاراکترهای مشابه یونیکد را به شما ارائه می دهد.
استفاده از یونیکد با نمادهای @font-face
اگر از نمادهایی استفاده میکنید که از طریق @font-face با یک فونت خارجی پیوند داده شدهاند، میتوان از کاراکترهای یونیکد به عنوان بازگشتی استفاده کرد. به این ترتیب میتوانید یک کاراکتر یونیکد مشابه را در دستگاهها یا مرورگرهایی که @font-face در آنها پشتیبانی نمیشود نشان دهید:
در سمت چپ نمادهای Font Awesome در کروم و در سمت راست کاراکترهای جایگزین یونیکد در Opera Mini قرار دارند.
بسیاری از ابزارهای تطبیق @font-face از محدوده کاراکتر یونیکد از ناحیه استفاده خصوصی استفاده می کنند. مشکل این روش این است که اگر @font-face پشتیبانی نشود، کدهای کاراکتر بدون هیچ معنایی به کاربر ارسال می شود.
برای ایجاد مجموعههای آیکون در @font-face عالی است و به شما امکان میدهد یک کاراکتر یونیکد مناسب را بهعنوان پایه نماد انتخاب کنید.
اما مراقب باشید - برخی از مرورگرها و دستگاه ها دوست ندارند شخصیت های فردییونیکد هنگام استفاده با @font-face. منطقی است که پشتیبانی از کاراکترهای یونیکد را با Unify بررسی کنید - این برنامه به شما کمک می کند تعیین کنید که استفاده از یک کاراکتر در مجموعه نمادهای @font-face چقدر ایمن است.
پشتیبانی از کاراکترهای یونیکد
مشکل اصلی استفاده از کاراکترهای یونیکد بهعنوان بک گراند، پشتیبانی ضعیف در صفحهخوانها است (باز هم، برخی اطلاعات در این مورد را میتوانید در Unify پیدا کنید)، بنابراین مهم است که کاراکترهایی را که استفاده میکنید با دقت انتخاب کنید.
اگر نماد شما فقط یک عنصر تزئینی در کنار برچسب متنی است که توسط صفحهخوان قابل خواندن است، لازم نیست زیاد نگران باشید. اما اگر نماد به تنهایی است، ارزش افزودن یک برچسب متنی مخفی را دارد تا به کاربران صفحهخوان کمک کند. حتی اگر یک کاراکتر یونیکد توسط یک صفحه خوان خوانده شود، این احتمال وجود دارد که با هدف مورد نظر خود بسیار متفاوت باشد. به عنوان مثال، ≡ (≡) به عنوان نماد همبرگر توسط VoiceOver در iOS به عنوان "یکسان" خوانده می شود.
یونیکد در نام کلاس های CSS
این واقعیت که یونیکد را می توان در نام کلاس ها و در شیوه نامه ها استفاده کرد از سال 2007 شناخته شده است. در آن زمان بود که جاناتان اسنوک در مورد استفاده از کاراکترهای یونیکد در کلاس های کمکی هنگام قرار دادن گوشه های گرد نوشت. این ایده توزیع زیادی دریافت نکرده است، اما ارزش آن را دارد که در مورد امکان استفاده از Unicode در نام کلاس ها (کاراکترهای خاص یا سیریلیک) بدانید.
انتخاب فونت
تعداد کمی از فونتها از مجموعه کامل کاراکترهای یونیکد پشتیبانی میکنند، بنابراین هنگام انتخاب فونت، حتماً کاراکترهایی را که میخواهید بررسی کنید.
تعداد زیادی نماد در Segoe UI Symbol یا Arial Unicode MS. این فونت ها بر روی کامپیوتر و مک موجود هستند. Lucida Grande همچنین دارای تعداد زیادی کاراکتر یونیکد است. برای اطمینان از آن می توانید این فونت ها را به اعلان خانواده فونت اضافه کنید حداکثر تعدادکاراکترهای یونیکد برای کاربرانی که این فونت ها را نصب کرده اند.
تعیین پشتیبانی یونیکد
بسیار راحت است که بتوان حضور یک کاراکتر یونیکد خاص را بررسی کرد، اما هیچ راه تضمینی برای انجام این کار وجود ندارد.
کاراکترهای یونیکد در صورت پشتیبانی می توانند موثر باشند. به عنوان مثال، یک ایموجی در خط موضوع ایمیل آن را از بقیه متمایز می کند صندوق پستی.
نتیجه
این مقاله فقط اصول یونیکد را پوشش می دهد. امیدوارم برای شما مفید باشد و به شما در درک بهتر یونیکد و استفاده موثر از آن کمک کند.
لیست پیوند
- (مولد مجموعه آیکون @font-face مبتنی بر یونیکد)
- Shape Catcher (ابزار تشخیص کاراکتر یونیکد)
- Unicodinator (جدول کاراکترهای یونیکد)
- Unify (پشتیبانی از کاراکترهای یونیکد را در مرورگرها بررسی کنید)
- Unitools (مجموعه ابزارهای کار با یونیکد)
من خودم واقعاً از عناوینی مانند "پوکمون ها در آب خود برای قوری / قابلمه / ماهیتابه" خوشم نمی آید، اما به نظر می رسد دقیقاً همین طور است - ما در مورد چیزهای اساسی صحبت خواهیم کرد که کار با آنها اغلب منجر به یک دسته از پر شده می شود. برجستگی ها و زمان تلف شده زیادی در مورد این سوال - "چرا کار نمی کند؟" اگر هنوز می ترسید و / یا یونیکد را نمی فهمید - از زیر گربه می پرسم.
برای چی؟
سوال اصلی تازه کار، که با تعداد قابل توجهی از رمزگذاری ها و مکانیسم های به ظاهر گیج کننده برای کار با آنها همراه است (مثلاً در Python 2.x). پاسخ کوتاه به این دلیل است که این اتفاق افتاده است :)رمزگذاری، کسی که نمی داند، راهی برای نمایش اعداد، حروف و تمام کاراکترهای دیگر در حافظه رایانه است (بخوانید - در صفر-یک / اعداد). برای مثال، یک فاصله به صورت 0b100000 (به صورت دودویی)، 32 (به صورت اعشاری)، یا 0x20 (در سیستم هگزادسیمالمحاسبه).
بنابراین، هنگامی که حافظه بسیار کمی وجود داشت و 7 بیت برای همه رایانه ها کافی بود تا همه کاراکترهای لازم را نشان دهند (اعداد، حروف کوچک / حروف لاتین بزرگ، یک دسته از کاراکترها و به اصطلاح کاراکترهای کنترل شده - همه 127 شماره ممکن به کسی داده شد. ). رمزگذاری در آن زمان یک بود - ASCII. زمان گذشت، همه خوشحال بودند، و آنهایی که خوشحال نبودند (بخوانید - که فاقد علامت "" یا حرف بومی "u" بودند) - از 128 کاراکتر باقی مانده به صلاحدید خود استفاده کردند، یعنی رمزگذاری های جدیدی ایجاد کردند. اینگونه ISO-8859-1 و cp1251 و KOI8 ما (یعنی سیریلیک) ظاهر شد. همراه با آنها، مشکل تفسیر بایت های نوع 0b1******* (یعنی کاراکترهای \ اعداد از 128 تا 255) ظاهر شد - به عنوان مثال، 0b11011111 در رمزگذاری cp1251 "I" بومی ما است. همان زمان در ISO-8859-1 Eszett آلمانی یونانی (پیشنهاد می کند) "ß" است. همانطور که انتظار می رود، ارتباط شبکه و فقط به اشتراک گذاری فایل بین کامپیوترهای مختلفبا وجود این واقعیت که سرصفحه هایی مانند "Content-Encoding" به خدا می داند چیست پروتکل HTTP، ایمیل ها و صفحات HTML کمی وضعیت را نجات دادند.
در آن لحظه ذهن های روشن جمع شدند و عرضه داشتند استاندارد جدید- یونیکد این یک استاندارد است، نه یک رمزگذاری - خود یونیکد تعیین نمی کند که چگونه کاراکترها روی هارد دیسک ذخیره می شوند یا از طریق شبکه منتقل می شوند. فقط رابطه بین یک کاراکتر و یک عدد را تعریف می کند و قالبی که طبق آن این اعداد به بایت تبدیل می شوند توسط رمزگذاری های یونیکد (مثلا UTF-8 یا UTF-16) تعیین می شود. در این لحظهاستاندارد یونیکد کمی بیش از 100 هزار کاراکتر دارد، در حالی که UTF-16 امکان پشتیبانی از بیش از یک میلیون را فراهم می کند (UTF-8 حتی بیشتر است).
برای یک موضوع کاملتر و سرگرم کننده تر، به شما توصیه می کنم کتاب حداقل مطلق هر برنامه نویس کاملاً مثبتی که باید درباره یونیکد و مجموعه کاراکترها نوشته جوئل اسپولسکی بزرگ بداند را بخوانید.
برو سر اصل مطلب!
طبیعتاً در پایتون نیز از یونیکد پشتیبانی می شود. اما، متأسفانه، فقط در پایتون 3، تمام رشته ها یونیکد شدند و مبتدیان باید با خطاهایی مانند:>>> با open("1.txt") به عنوان fh: s = fh.read() >>> print s koschey >>> parser_result = u"Baba Yaga" # تکلیف برای وضوح، تصور کنید که این نتیجه کار چند تجزیه کننده >>>
یا مثل این:
>>> str(Parser_result) Traceback (آخرین تماس اخیر): فایل "
بیایید آن را بفهمیم، اما به ترتیب.
چرا کسی باید از یونیکد استفاده کند؟
چرا تجزیه کننده html مورد علاقه من یونیکد را برمی گرداند؟ بگذارید یک رشته معمولی را برگرداند و من آنجا با آن برخورد خواهم کرد! درست؟ نه واقعا. اگرچه هر یک از کاراکترهای موجود در یونیکد را می توان (احتمالا) در کدگذاری تک بایتی نشان داد (ISO-8859-1، cp1251 و دیگران تک بایت نامیده می شوند، زیرا هر کاراکتری را دقیقاً در یک بایت رمزگذاری می کنند)، اما چه می شود اگر آیا باید در رشته کاراکترهایی از رمزگذاری های مختلف وجود داشته باشد؟ به هر کاراکتر یک رمزگذاری جداگانه اختصاص دهید؟ خیر، البته باید از یونیکد استفاده کنید.چرا ما نوع جدید"یونیکد"؟
بنابراین به جالب ترین آنها رسیدیم. رشته در پایتون 2.x چیست؟ ساده است بایت ها. فقط داده های باینری که می تواند هر چیزی باشد. در واقع، وقتی چیزی شبیه به: >>> x = "abcd" >>> x "abcd" می نویسیم، مفسر متغیری را که شامل چهار حرف اول الفبای لاتین باشد، ایجاد نمی کند، بلکه فقط دنباله ("a" را می سازد. ، "b"، "c"، "d") با چهار بایت و حروف لاتین در اینجا منحصراً برای تعیین این مقدار بایت خاص استفاده می شود. یعنی "a" در اینجا فقط مترادفی برای نوشتن "\x61" است و نه کمی بیشتر. مثلا:>>> "\x61" "a" >>> struct.unpack(">4b", x) # "x" فقط چهار نویسه امضا شده/بدون علامت است (97، 98، 99، 100) >>> struct.unpack (">2h"، x) # یا دو شورت (24930، 25444) >>> struct.unpack(">l"، x) # یا یک بلند (1633837924،) >>> struct.unpack (">f" ، x) # یا شناور (2.6100787562286154e+20،) >>> struct.unpack(">d", x * 2) # یا نصف دوبل (1.2926117739473244e+161،)
و بس!
و پاسخ به این سوال - چرا ما به "یونیکد" نیاز داریم از قبل واضح تر است - ما به نوعی نیاز داریم که با کاراکترها نشان داده شود، نه بایت ها.
خوب، من می فهمم که خط چیست. پس یونیکد در پایتون چیست؟
"نوع یونیکد" در درجه اول یک انتزاع است که ایده یونیکد (مجموعه ای از کاراکترها و اعداد مرتبط با آنها) را اجرا می کند. یک شی از نوع "یونیکد" دیگر دنباله ای از بایت ها نیست، بلکه دنباله ای از کاراکترها است بدون اینکه هیچ ایده ای در مورد اینکه چگونه این کاراکترها می توانند به طور موثر در حافظه کامپیوتر ذخیره شوند. اگر بخواهید، سطح انتزاع بالاتری نسبت به رشتههای بایتی است (که پایتون 3 آن را رشتههای معمولی مینامد که در پایتون 2.6 استفاده میشود).چگونه از یونیکد استفاده کنیم؟
یک رشته یونیکد در پایتون 2.6 می تواند به سه روش (حداقل به طور طبیعی) ایجاد شود:- u"" تحت اللفظی: >>> u"abc" u"abc"
- روش "decode" برای رشته بایت: >>> "abc".decode("ascii") u"abc"
- تابع "unicode": >>> unicode("abc"، "ascii") u"abc"
"\x61" -> رمزگذاری ascii-> حروف کوچک لاتین "a" -> u"\u0061" (نقطه یونیکد برای این حرف) یا "\xe0" -> رمزگذاری c1251 -> حروف کوچک سیریلیک "a" -> u"\u0430"
چگونه یک رشته معمولی از رشته یونیکد دریافت کنیم؟ آن را رمزگذاری کنید:
>>> u"abc".encode("ascii") "abc"
الگوریتم کدگذاری طبیعتاً برعکس موارد فوق است.
ما به یاد میآوریم و اشتباه نمیکنیم - یونیکد == کاراکترها، رشته == بایتها و بایتها -> چیزی معنیدار (شخصیتها) رمزگشایی (decode) است، و کاراکترها -> بایتها رمزگذاری (encode) است.
کدگذاری نشده :(
بیایید به نمونه هایی از ابتدای مقاله نگاه کنیم. الحاق یک رشته و یک رشته یونیکد چگونه کار می کند؟ رشته سادهباید به یک رشته یونیکد تبدیل شود و از آنجایی که مفسر رمزگذاری را نمی داند، از رمزگذاری پیش فرض ascii استفاده می کند. اگر این رمزگذاری نتواند رشته را رمزگشایی کند، یک خطای زشت دریافت می کنیم. در این مورد، ما باید خود رشته را با استفاده از رمزگذاری صحیح به رشته یونیکد تبدیل کنیم:>>> نوع چاپ (Parser_result)، parser_result
یک "UnicodeDecodeError" معمولاً نشان دهنده این است که رشته باید با استفاده از رمزگذاری صحیح به یونیکد رمزگشایی شود.
اکنون از رشته های "str" و یونیکد استفاده می کنیم. از رشته های "str" و unicode استفاده نکنید :) در "str" راهی برای تعیین رمزگذاری وجود ندارد، بنابراین رمزگذاری پیش فرض همیشه استفاده می شود و هر کاراکتر > 128 منجر به خطا می شود. از روش "رمزگذاری" استفاده کنید:
>>> نوع چاپ، s
"UnicodeEncodeError" نشانه ای است که نشان می دهد هنگام تبدیل رشته یونیکد به رشته معمولی باید رمزگذاری صحیح را مشخص کنیم (یا از پارامتر دوم "نادیده گرفتن"\"replace"\"xmlcharrefreplace" در روش "encode" استفاده کنیم).
من بیشتر می خواهم!
خوب، بیایید دوباره از بابا یاگا از مثال بالا استفاده کنیم:>>> parser_result = u"Baba Yaga" #1 >>> parser_result u"\xe1\xe0\xe1\xe0-\xff\xe3\xe0" #2 >>> print parser_result áàáà-ÿãà #3 >>> print parser_result.encode("latin1") #4 بابا یاگا >>> print parser_result.encode("latin1").decode("cp1251") #5 بابا یاگا >>> print unicode("Baba Yaga", "cp1251") شماره 6 بابا یاگا
مثال خیلی ساده نیست، اما همه چیز وجود دارد (خوب، تقریباً همه چیز). اینجا چه خبره:
- در ورودی چه داریم؟ بایت هایی که IDLE به مفسر ارسال می کند. در خروجی به چه چیزی نیاز دارید؟ یونیکد، یعنی نمادها. باقی مانده است که بایت ها را به کاراکتر تبدیل کنیم - اما شما نیاز به رمزگذاری دارید، درست است؟ چه رمزگذاری استفاده خواهد شد؟ بیایید بیشتر نگاه کنیم.
- اینجا نکته مهم: >>> "بابا یاگا" "\xe1\xe0\xe1\xe0-\xff\xe3\xe0" >>> u"\u00e1\u00e0\u00e1\u00e0-\u00ff\u00e3\u00e0" == u " \xe1\xe0\xe1\xe0-\xff\xe3\xe0" True همانطور که می بینید، پایتون با انتخاب کدگذاری زحمتی نمی کشد - بایت ها به سادگی به نقاط یونیکد تبدیل می شوند:
>>> ord("a") 224 >>> ord(u"a") 224 - فقط مشکل اینجاست - کاراکتر 224 در cp1251 (رمزگذاری استفاده شده توسط مفسر) اصلاً با 224 در یونیکد یکسان نیست. به همین دلیل است که هنگام تلاش برای چاپ رشته یونیکد خود با اشکال مواجه می شویم.
- چگونه به مادربزرگ کمک کنیم؟ به نظر می رسد که 256 کاراکتر اول یونیکد مانند کدگذاری ISO-8859-1\latin1 است، اگر از آن برای رمزگذاری رشته یونیکد استفاده کنیم، بایت هایی را که خودمان وارد کرده ایم دریافت خواهیم کرد (برای کسانی که علاقه مند - Objects/unicodeobject.c، به دنبال تعریف تابع "unicode_encode_ucs1"):
>>> parser_result.encode("latin1") "\xe1\xe0\xe1\xe0-\xff\xe3\xe0" - چگونه یک زن را در یونیکد دریافت کنیم؟ باید مشخص کنید از کدام کدگذاری استفاده کنید:
>>> parser_result.encode("latin1").decode("cp1251") u"\u0431\u0430\u0431\u0430-\u044f\u0433\u0430" - روش نقطه 5 مطمئناً چندان داغ نیست، استفاده از یونیکد داخلی بسیار راحت تر است.
روش دیگری برای استفاده از "u"" برای نشان دادن، به عنوان مثال، سیریلیک، و مشخص نکردن نقاط یونیکد رمزگذاری یا غیرقابل خواندن (به عنوان مثال "u"\u1234"" وجود دارد. این روش خیلی راحت نیست، اما جالب است - استفاده از کدهای موجودیت یونیکد:
>>> s = u"\N(حروف کوچک سیریلیک KA)\N(حروف کوچک سیریلیک O)\N(حروف کوچک سیریلیک SHCHA)\N(حرف کوچک سیریلیک IE)\N(حروف کوچک سیریلیک SHORT I)" > >> چاپ s
خب مثل همه چیز توصیه اصلی این است که "encode" \ "decode" را اشتباه نگیرید و تفاوت بین بایت ها و کاراکترها را درک کنید.
پایتون 3
اینجا بدون کد، چون تجربه ای وجود ندارد. شاهدان می گویند که همه چیز در آنجا بسیار ساده تر و سرگرم کننده تر است. چه کسی گربهها را برای نشان دادن تفاوتهای بین اینجا (Python 2.x) و آنجا (Python 3.x) به نمایش میگذارد - احترام و احترام.سالم
از آنجایی که ما در مورد رمزگذاری صحبت می کنیم، من منبعی را توصیه می کنم که هر از گاهی به غلبه بر krakozyabry کمک می کند - http://2cyr.com/decode/?lang=ru.برچسب ها:
- پایتون
- یونیکد
- رمزگذاری