مجموعه شخصیت ها را تنظیم کنید
متا تگ
شما باید یک متا تگ مخصوص به هر صفحه (یا الگوی هدر) اضافه کنید که به مرورگر می گوید از کدام مجموعه کاراکتر برای نمایش متون استفاده کند. این تگ استاندارد است و معمولاً به شکل زیر است:
charset=UTF-8» />
charset = "utf-8"/> (نسخه HTML 5)
باید آن را در بخش قرار دهم.
- در همان ابتدا، بلافاصله پس از باز شدن، بهتر است :تگ رمزگذاری متا
از طریق htaccess (اگر هیچ کمکی نکرد)
معمولا دو گزینه اول کافی است و مرورگرها متن را نمایش می دهند چگونه. اما در مورد برخی از آنها ممکن است مشکلاتی وجود داشته باشد و بنابراین می توانید به کمک متوسل شوید. فایل htaccess.
برای این کار باید خط زیر را در آن بنویسید:
AddDefaultCharset utf-8
همین. اگر 3 مورد از این روش های رمزگذاری را پشت سر هم در پروژه خود اعمال کنید، احتمال آن وجود دارد که همه چیز همانطور که باید نمایش داده شود، نزدیک به 100 درصد است.
چگونه می توان آنچه را که در پشت شخصیت های مبهم در سایت پنهان شده است، "دید" کرد؟
اگر از یک صفحه وب بازدید کرده اید، "دیوانه" را می بینید و می خواهید متن عادی را ببینید، پس فقط دو راه وجود دارد:
- به صاحب سایت بگویید همه چیز را به درستی تنظیم کند
- سعی کنید رمزگذاری را خودتان حدس بزنید. این کار با استفاده از ابزارهای استاندارد مرورگر انجام می شود. برای مثال در کروم، باید روی منو کلیک کنید "ابزار => رمزگذاری" و از یک لیست بزرگ، مجموعه کاراکتر مناسب را انتخاب کنید (یعنی حدس بزنید).
خوشبختانه، تقریباً تمام پروژه های وب مدرن با رمزگذاری UTF-8 انجام می شود که برای الفبای مختلف "جهانی" است و بنابراین کمتر و کمتر احتمال دارد که این کاراکترهای مبهم در اینترنت مشاهده شود.
3 رایسلام به خوانندگان عزیز وبلاگ من. امروز در مورد رمزگذاری با شما صحبت خواهیم کرد. اگر مقاله من در مورد آن را بخوانید، می دانید که هیچ سندی در اینترنت به شکلی که ما به دیدن آن عادت کرده ایم ذخیره نمی شود. با کمک نمادها و علائم غیرقابل درک برای شخص نوشته شده است. در مورد متن نیز همینطور است.
چندین رمزگذاری وجود دارد و بنابراین، گاهی اوقات وقتی هنگام باز کردن یک کتاب در یک برنامه تلفن همراه یا آپلود یک مقاله در یک وب سایت، کاراکترهای نامفهومی را مشاهده می کنید، با تغییر برخی مقادیر در تنظیمات، الفبای آشنا را خواهید دید. به چشم
رمزگذاری Windows-1251 - چیست، هنگام ایجاد یک سایت به چه معناست، چه شخصیت هایی در دسترس خواهند بود و آیا بهترین راه حل امروزی است؟ همه اینها در مقاله امروز مثل همیشه به زبان ساده، تا حد امکان واضح و با حداقل تعداد اصطلاحات.
کمی تئوری
همانطور که گفتم هر سندی در رایانه یا اینترنت به عنوان یک کد باینری ذخیره می شود. به عنوان مثال، اگر از رمزگذاری ASCII استفاده می کنید، حرف "K" به صورت 10001010 نوشته می شود و ویندوز 1251 نماد - Љ را در زیر این عدد پنهان می کند. در نتیجه، اگر مرورگر یا برنامه ای به جدول دیگری دسترسی پیدا کند و به جای ASCII کدهای ویندوز 1251 را بخواند، خواننده کاراکتری را می بیند که برای او کاملاً نامفهوم است.
سوال منطقی است که برای چه چیزی لازم بود که جدول های زیادی با کد ارائه شود؟ واقعیت این است که علاوه بر الفبای روسی، انگلیسی، آلمانی، چینی نیز وجود دارد. بر اساس برخی برآوردها، حدود 200000 کاراکتر وجود دارد. اگرچه، من واقعاً به این آمارها اعتماد ندارم، به یاد ژاپنی ها.
فراموش نکنید که باید کد خود را برای حروف بزرگ و کوچک ایجاد کنید، کاما، خط تیره و غیره وجود دارد.
هر چه تعداد نمادها در جدول بیشتر باشد، کد هر یک از آنها طولانی تر است و در نتیجه وزن سند بزرگتر می شود.
تصور کنید یک کتاب 4 گیگابایت وزن داشته باشد! بارگذاری آن زمان زیادی طول می کشد و تمام فضای خالی رایانه را اشغال می کند. تصمیم برای دانلود یک تصمیم دشوار بود.
اگر به وبسایتها فکر میکنید، تصور اینکه چه اتفاقی میافتد معمولاً ترسناک است. هر صفحه حتی روی فیبر نوری پرسرعت بیش از یک ساعت باز می شود! من فکر می کنم تلفن های همراه را می توان با خیال راحت دور انداخت. استفاده از آنها در خارج از منزل حتی با 4G؟ شک دارم.
به این دلایل، هر برنامه نویسی در یک زمان سعی کرد تا جدول نمادهای خود را ارائه دهد. به طوری که استفاده از آن راحت باشد و وزن بهینه حفظ شود.
به عنوان مثال، مایکروسافت ویندوز 1251 را برای بخش روسی زبان ایجاد کرد. مطمئناً مزایا و معایب خود را دارد. درست مثل هر محصول دیگری.
در حال حاضر، تنها 2٪ از تمام صفحات در اینترنت در 1251 نوشته شده است. اکثر وب مسترها از UTF-8 استفاده می کنند. چرا اینطور است؟
معایب و مزایا
UTF-8، بر خلاف ویندوز-1251، یک رمزگذاری جهانی است، حاوی حروف الفبای مختلف است. حتی UTF-128 وجود دارد که به طور کلی همه زبان ها وجود دارد - تئولو، سواحیلی، لائوس، مالتی و غیره.
UTF-8 فقیرتر است، حروف فضای بسیار کمتری را اشغال می کنند و فقط یک بایت از حافظه را اشغال می کنند، مانند سال 1251. UTF دارای کاراکترهای نادر از زبان های دیگر یا کاراکترهای خاص است. وزن آنها 5-6 بایت است، اما به ندرت در سند استفاده می شود.
این رمزگذاری متفکرانه تر است و بنابراین اکثر برنامه ها به طور پیش فرض از آن استفاده می کنند. یعنی اگر به برنامه نگویید از چه رمزگذاری استفاده می کنید، اولین چیزی که بررسی می کند UTF-8 است.
هنگامی که یک سند html برای یک وب سایت ایجاد می کنید، به مرورگرها می گویید که هنگام رمزگشایی رکوردها به دنبال کدام جدول باشند.
برای این کار باید داده های زیر را در تگ head قرار دهید. بعد از کاراکترهای "charset =" مانند مثال زیر، utf یا windows می آید.
<متا http-equiv="Content-Type" content= "text/html; charset=windows-1251"> |
اگر در آینده بخواهید چیزی را تغییر دهید و عبارتی را به زبان آلبانیایی با استفاده از این جدول رمزگشایی وارد کنید، هیچ چیز کار نخواهد کرد، زیرا رمزگذاری این زبان را پشتیبانی نمی کند. UTF-8 به شما این امکان را می دهد که بدون هیچ مشکلی این کار را انجام دهید.
اگر به ایجاد صحیح سایت علاقه مند هستید، می توانم دوره میخائیل روساکوف را به شما توصیه کنم. ایجاد و ارتقاء سایت از A تا Z ».
این شامل تعداد زیادی است - 256 درس موثر بر جاوا اسکریپت و XML. علاوه بر زبان های برنامه نویسی قادر خواهید بود نحوه کسب درآمد از سایت یعنی کسب سود زودتر و بیشتر را درک کنید. یکی از معدود دوره هایی است که همه چیزهایی که نیاز دارید را با این جزئیات توضیح می دهد.
الان یکساله دارم درس میخونم در مدرسه وبلاگ نویسان الکساندر بوریسف . چندین برابر بیشتر زمان می برد، پایان هنوز قابل مشاهده نیست، اما از جامعیت و نظم کمتری برخوردار نیست. ایجاد انگیزه برای ادامه رشد.
خوب، اگر سوالی دارید، نیازی به جستجو در اینترنت ندارید. همیشه یک مربی خوب وجود دارد.
چیزی که من از موضوع فاصله گرفتم. بیایید به رمزگذاری برگردیم.
پایه های حمام
وقتی صحبت از php می شود، همه چیز به طور کلی ترسناک است. قبلاً در مورد پایگاه داده ها صحبت کردم، آنها برای افزایش سرعت سایت استفاده می شوند. معمولاً با آنها تماس نمی گیرید، اما زمانی که نیاز به انتقال سایت باشد، ناراحت کننده می شود.
مشکلات برای همه پیش می آید، فارغ از تجربه کاری، مدت خدمت و طول خدمت. برخی از صفحات در پایگاه داده ممکن است شامل تمام کاراکترهای موجود برای ویندوز-1251 باشند، برخی دیگر، به عنوان مثال، در قالب های صفحه، در یک رمزگذاری متفاوت.
تا زمانی که نیاز به انتقال باشد، همه چیز کار می کند و کار می کند، اگرچه کاملاً درست نیست. اما پس از حرکت، دردسر شروع می شود. در حالت ایده آل، شما باید فقط از UTF یا Windows-1251 استفاده کنید، اما در واقع، چنین کاستی هایی همیشه برای همه اتفاق می افتد.
برای اینکه رمزگشایی سازگار باشد، باید کد mysql_query ("SET NAMES cp1251") را وارد کنید. در این حالت، تبدیل با استفاده از یک پروتکل متفاوت - cp1251 انجام می شود.
htaccess
اگر دائماً تصمیم به استفاده از 1251 در سایت داشتید، باید یک فایل htaccess را پیدا کنید یا ایجاد کنید. این مسئول تنظیمات پیکربندی است. سه خط دیگر باید به آن اضافه شود تا همه چیز با هم هماهنگ شود.
DefaultLanguage en; AddDefaultCharset windows-1251; php_value default_charset "cp1251" |
DefaultLanguage en; AddDefaultCharset windows-1251; php_value default_charset "cp1251"
من همچنان به شدت توصیه می کنم که از UTF-8 استفاده کنید. محبوب تر، ساده تر و غنی تر است. هر تصمیمی که اکنون می گیرید، مهم است که بتوانید بعداً آنها را اصلاح کنید. افزودن نسخه انگلیسی سایت با استفاده از این رمزگذاری بسیار ساده تر خواهد بود. هیچ چیزی نیاز به اصلاح ندارد.
تصمیم با شماست در خبرنامه مشترک شوید تا در اسرع وقت بدانید که کجا باید مطالعه کنید تا اشتباهات دیگران تکرار نشود و همچنین کدام وبلاگ نویسان بازدیدکننده بیشتری داشته باشند.
تا دیدار مجدد و آرزوی موفقیت در تلاش شما.
(کدهای 0 تا 127)، یعنی. حروف لاتین، اعداد و کاراکترهای خاص در یک بایت کدگذاری می شوند. حروف روسی (سیریلیک) با کدهای 16 بیتی (دو بایتی) نشان داده می شوند:
110XXXXXX 10XXXXXX،
که در آن X ارقام باینری برای قرار دادن کد کاراکتر مطابق جدول هستند یونیکد.
یونیکد (انگلیسی: Unicode) یک استاندارد رمزگذاری کاراکتر است که به شما امکان می دهد کاراکترهای تقریباً همه زبان های نوشتاری را نشان دهید. کاراکترهای نمایش داده شده در یونیکد به صورت اعداد صحیح بدون علامت کدگذاری می شوند. این اعداد را کدهای کاراکتر یونیکد یا به سادگی می نامند یونیکد. یونیکد چندین شکل برای نمایش کاراکترها در رایانه دارد: UTF-8، UTF-16 (UTF-16BE، UTF-16LE) و UTF-32 (UTF-32BE، UTF-32LE). (فرمت تبدیل یونیکد انگلیسی - UTF).
نحوه کدگذاری آن را در نظر بگیرید UTF-8حرف اف. او یونیکد- 1046 10 یا 0416 16 یا 10000 010110 2 . یونیکدبه صورت دودویی به دو قسمت تقسیم می شود: پنج بیت چپ و شش بیت راست. سمت چپ با علامت به یک بایت اضافه می شود 110 کد دو بایتی UTF-8: 110 10000. دو بیت به سمت راست اختصاص داده شده است 10 نشانه ادامه یک کد چند بایتی: 10 010110. کد حرف آخر اف v UTF-8به نظر می رسد که:
110
10000 10
010110 2
یا D0 96 16
بنابراین، نامه روسی دو بار رمزگذاری می شود: اول به 11 بیت یونیکدو سپس به UTF-8 16 بیتی.
در جدول زیر علاوه بر کدها یونیکدو UTF-8در نماد هگزادسیمال، کدهای داده شده UTF-8در نماد اعشاری و برای مقایسه کدهای سیریلیک در رمزگذاری CP-1251، در غیر این صورت نامیده می شود ویندوز-1251.
نماد | یونیکد | UTF-8 | CP-1251 | ||
---|---|---|---|---|---|
شستن. | ده | شستن. | ده | ||
آ | 0410 | 1040 | D090 | 208 144 | 192 |
ب | 0411 | 1041 | D091 | 208 145 | 193 |
V | 0412 | 1042 | D092 | 208 146 | 194 |
جی | 0413 | 1043 | D093 | 208 147 | 195 |
دی | 0414 | 1044 | D094 | 208 148 | 196 |
E | 0415 | 1045 | D095 | 208 149 | 197 |
اف | 0416 | 1046 | D096 | 208 150 | 198 |
دبلیو | 0417 | 1047 | D097 | 208 151 | 199 |
و | 0418 | 1048 | D098 | 208 152 | 200 |
Y | 0419 | 1049 | D099 | 208 153 | 201 |
به | 041A | 1050 | D09A | 208 154 | 202 |
L | 041B | 1051 | D09B | 208 155 | 203 |
م | 041C | 1052 | D09C | 208 156 | 204 |
اچ | 041D | 1053 | D09D | 208 157 | 205 |
O | 041E | 1054 | D09E | 208 158 | 206 |
پ | 041F | 1055 | D09F | 208 159 | 207 |
آر | 0420 | 1056 | D0A0 | 208 160 | 208 |
با | 0421 | 1057 | D0A1 | 208 161 | 209 |
تی | 0422 | 1058 | D0A2 | 208 162 | 210 |
در | 0423 | 1059 | D0A3 | 208 163 | 211 |
اف | 0424 | 1060 | D0A4 | 208 164 | 212 |
ایکس | 0425 | 1061 | D0A5 | 208 165 | 213 |
سی | 0426 | 1062 | D0A6 | 208 166 | 214 |
اچ | 0427 | 1063 | D0A7 | 208 167 | 215 |
دبلیو | 0428 | 1064 | D0A8 | 208 168 | 216 |
SCH | 0429 | 1065 | D0A9 | 208 169 | 217 |
کومرسانت | 042A | 1066 | D0AA | 208 170 | 218 |
اس | 042B | 1067 | D0AB | 208 171 | 219 |
ب | 042C | 1068 | D0AC | 208 172 | 220 |
E | 042D | 1069 | D0AD | 208 173 | 221 |
YU | 042E | 1070 | D0AE | 208 174 | 222 |
من هستم | 042F | 1071 | D0AF | 208 175 | 223 |
آ | 0430 | 1072 | D0B0 | 208 176 | 224 |
ب | 0431 | 1073 | D0B1 | 208 177 | 225 |
v | 0432 | 1074 | D0B2 | 208 178 | 226 |
جی | 0433 | 1075 | D0B3 | 208 179 | 227 |
د | 0434 | 1076 | D0B4 | 208 180 | 228 |
ه | 0435 | 1077 | D0B5 | 208 181 | 229 |
خوب | 0436 | 1078 | D0B6 | 208 182 | 230 |
ساعت | 0437 | 1079 | D0B7 | 208 183 | 231 |
و | 0438 | 1080 | D0B8 | 208 184 | 232 |
هفتم | 0439 | 1081 | D0B9 | 208 185 | 233 |
به | 043A | 1082 | D0BA | 208 186 | 234 |
ل | 043B | 1083 | D0BB | 208 187 | 235 |
متر | 043C | 1084 | D0BC | 208 188 | 236 |
n | 043D | 1085 | D0BD | 208 189 | 237 |
O | 043E | 1086 | D0BE | 208 190 | 238 |
پ | 043F | 1087 | D0BF | 208 191 | 239 |
آر | 0440 | 1088 | D180 | 209 128 | 240 |
با | 0441 | 1089 | D181 | 209 129 | 241 |
تی | 0442 | 1090 | D182 | 209 130 | 242 |
در | 0443 | 1091 | D183 | 209 131 | 243 |
f | 0444 | 1092 | D184 | 209 132 | 244 |
ایکس | 0445 | 1093 | D185 | 209 133 | 245 |
ج | 0446 | 1094 | D186 | 209 134 | 246 |
ساعت | 0447 | 1095 | D187 | 209 135 | 247 |
w | 0448 | 1096 | D188 | 209 136 | 248 |
SCH | 0449 | 1097 | D189 | 209 137 | 249 |
ب | 044A | 1098 | D18A | 209 138 | 250 |
س | 044B | 1099 | D18B | 209 139 | 251 |
ب | 044C | 1100 | D18C | 209 140 | 252 |
اوه | 044D | 1101 | D18D | 209 141 | 253 |
یو | 044E | 1102 | D18E | 209 142 | 254 |
من هستم | 044F | 1103 | D18F | 209 143 | 255 |
شخصیت های خارج از قاعده کلی | |||||
یو | 0401 | 1025 | D001 | 208 101 | 168 |
یو | 0451 | 1025 | D191 | 209 145 | 184 |
امروز با شما در مورد اینکه کراکوزیابرها از کجا در سایت و در برنامه ها آمده اند، چه کدهای متنی وجود دارد و کدام یک باید استفاده شود، صحبت خواهیم کرد. بیایید نگاهی دقیقتر به تاریخچه توسعه آنها بیندازیم، از ASCII پایه، و همچنین نسخههای توسعهیافته آن CP866، KOI8-R، Windows 1251، و با رمزگذاریهای مدرن کنسرسیوم یونیکد UTF 16 و 8 پایان میدهیم.
- نسخه های توسعه یافته Asuka - رمزگذاری های CP866 و KOI8-R
- ویندوز 1251 - یک گونه از ASCII و چرا باگ ها ظاهر می شوند
ASCII - رمزگذاری متن اصلی برای لاتین
توسعه رمزگذاری های متنی همزمان با شکل گیری صنعت IT اتفاق افتاد و در این مدت آنها توانستند دستخوش تغییرات بسیار زیادی شوند. از لحاظ تاریخی، همه چیز با EBCDIC شروع شد، که در تلفظ روسی نسبتاً ناهماهنگ بود، که امکان رمزگذاری حروف الفبای لاتین، اعداد عربی و علائم نگارشی را با کاراکترهای کنترلی امکان پذیر می کرد. اما با این حال، نقطه شروع برای توسعه رمزگذاری متن مدرن را باید معروف دانست ASCII(کد استاندارد آمریکایی برای تبادل اطلاعات، که در روسی معمولا به عنوان "aski" تلفظ می شود). این 128 نویسه اول را توصیف می کند که بیشتر توسط کاربران انگلیسی زبان استفاده می شود - حروف لاتین، اعداد عربی و علائم نگارشی. حتی در این 128 کاراکتر توصیف شده در ASCII، برخی از کاراکترهای خدماتی مانند براکت، میله، ستاره و غیره وجود داشت. در واقع، شما می توانید آنها را خودتان ببینید:![](https://i1.wp.com/info.javarush.ru/uploads/images/00/65/20/2015/12/15/15fe1a.png)
![](https://i2.wp.com/info.javarush.ru/uploads/images/00/65/20/2015/12/15/0a7d12.png)
نسخه های توسعه یافته Asuka - رمزگذاری CP866 و KOI8-R با شبه نگاری
بنابراین، ما شروع به صحبت در مورد ASCII کردیم، که، همانطور که بود، نقطه شروع برای توسعه همه رمزگذاری های مدرن (ویندوز 1251، یونیکد، UTF 8) بود. در ابتدا فقط حاوی 128 کاراکتر از الفبای لاتین، اعداد عربی و چیزهای دیگر بود، اما در نسخه توسعه یافته امکان استفاده از تمام 256 مقداری که می توان در یک بایت اطلاعات رمزگذاری کرد، فراهم شد. آن ها اضافه کردن کاراکترهای حروف زبان خود به Asci امکان پذیر شد. در اینجا لازم است مجدداً برای توضیح منحرف شویم - چرا اصلاً به رمزگذاری متن نیاز دارید؟و چرا اینقدر مهم است نمادها بر روی صفحه نمایش رایانه شما بر اساس دو چیز تشکیل می شوند - مجموعه ای از اشکال برداری (نمایش) از انواع کاراکترها (آنها در فایل هایی با فونت هایی قرار دارند که روی رایانه شما نصب شده اند) و کدی که به شما امکان می دهد آن را بیرون بکشید. دقیقاً همان یکی از این مجموعه اشکال برداری (فایل فونت) کاراکتری که باید در محل صحیح درج شود. واضح است که فونت ها مسئول خود فرم های برداری هستند، اما سیستم عامل و برنامه های استفاده شده در آن وظیفه رمزگذاری را بر عهده دارند. آن ها هر متنی در رایانه شما مجموعه ای از بایت ها خواهد بود که هر کدام یک کاراکتر از همین متن را رمزگذاری می کند. برنامه ای که این متن را روی صفحه نمایش می دهد (ویرایشگر متن، مرورگر و ...)، هنگام تجزیه کد، رمزگذاری کاراکتر بعدی را می خواند و به دنبال فرم برداری مربوطه در فایل فونت مورد نظر می گردد که برای نمایش این متن متصل است. سند همه چیز ساده و پیش پا افتاده است. این بدان معنی است که برای رمزگذاری هر کاراکتری که نیاز داریم (مثلاً از الفبای ملی)، دو شرط باید رعایت شود - شکل برداری این کاراکتر باید با فونت استفاده شده باشد و این کاراکتر می تواند در رمزگذاری های ASCII توسعه یافته رمزگذاری شود. در یک بایت بنابراین، یک دسته کامل از این گزینه ها وجود دارد. فقط برای رمزگذاری کاراکترهای زبان روسی، انواع مختلفی از Aska توسعه یافته وجود دارد. به عنوان مثال، در ابتدا وجود داشت CP866، که در آن امکان استفاده از حروف الفبای روسی وجود داشت و نسخه توسعه یافته ASCII بود. آن ها قسمت بالای آن کاملاً با نسخه اصلی Asuka (128 کاراکتر لاتین، اعداد و سایر موارد مزخرف) مطابقت داشت که در تصویر بالا نشان داده شده است، اما قسمت پایین جدول با رمزگذاری CP866 شکلی را داشت که در تصویر زیر نشان داده شده است. و مجاز به رمزگذاری 128 علامت دیگر (حروف روسی و انواع شبه نگاری در آنجا):![](https://i1.wp.com/info.javarush.ru/uploads/images/00/65/20/2015/12/15/a1391c.png)
![](https://i2.wp.com/info.javarush.ru/uploads/images/00/65/20/2015/12/15/73e6b5.png)
ویندوز 1251 - نسخه مدرن ASCII و چرا krakozyabry خزیدن
توسعه بیشتر رمزگذاری متن به این دلیل بود که سیستم عامل های گرافیکی محبوبیت بیشتری پیدا کردند و نیاز به استفاده از شبه نگاری در آنها با گذشت زمان از بین رفت. در نتیجه، یک گروه کامل بوجود آمد، که در اصل، هنوز نسخه های توسعه یافته Asuka بودند (یک کاراکتر متنی تنها با یک بایت اطلاعات رمزگذاری شده است)، اما بدون استفاده از کاراکترهای شبه. آنها متعلق به کدهای به اصطلاح ANSI بودند که توسط مؤسسه استانداردهای آمریکایی توسعه یافتند. در اصطلاح رایج، نام سیریلیک نیز برای نوع با پشتیبانی از زبان روسی استفاده می شود. نمونه ای از این دست می تواند باشد ویندوز 1251. این به طور مطلوب با CP866 و KOI8-R که قبلاً استفاده شده بود مقایسه می شود زیرا مکان نمادهای شبه نگاری در آن توسط نمادهای گمشده تایپوگرافی روسی (به غیر از علامت لهجه) و همچنین نمادهای استفاده شده در زبان های اسلاوی نزدیک به روسی (اوکراینی، بلاروسی و غیره).![](https://i0.wp.com/info.javarush.ru/uploads/images/00/65/20/2015/12/15/963d34.png)
![](https://i2.wp.com/info.javarush.ru/uploads/images/00/65/20/2015/12/15/1443f6.png)
یونیکد (یونیکد) - رمزگذاری جهانی UTF 8، 16 و 32
این هزاران کاراکتر گروه زبانی آسیای جنوب شرقی را نمیتوان به هیچ وجه در یک بایت اطلاعات توصیف کرد، که برای رمزگذاری کاراکترها در نسخههای توسعهیافته ASCII اختصاص داده شده بود. در نتیجه کنسرسیومی فراخوان داد یونیکد(یونیکد - کنسرسیوم یونیکد) با همکاری بسیاری از رهبران صنعت فناوری اطلاعات (کسانی که نرم افزار تولید می کنند، سخت افزار رمزگذاری می کنند، فونت ایجاد می کنند)، که علاقه مند به ظهور یک رمزگذاری متن جهانی بودند. اولین نسخه ای که تحت نظارت کنسرسیوم یونیکد منتشر شد، بود UTF-32. عدد در نام رمزگذاری به معنای تعداد بیت هایی است که برای رمزگذاری یک کاراکتر استفاده می شود. 32 بیت 4 بایت اطلاعات است که برای رمزگذاری یک کاراکتر در UTF جدید رمزگذاری جهانی مورد نیاز است. در نتیجه، همان فایل با متن، کدگذاری شده در نسخه توسعه یافته ASCII و در UTF-32، در مورد دوم دارای اندازه (وزن) چهار برابر بزرگتر خواهد بود. این بد است، اما اکنون این فرصت را داریم که با استفاده از UTF تعداد کاراکترهای برابر با دو به توان سی و دوم را رمزگذاری کنیم ( میلیاردها شخصیت، که هر مقدار واقعاً ضروری را با حاشیه زیادی پوشش می دهد). اما بسیاری از کشورهای دارای زبان های گروه اروپایی اصلاً نیازی به استفاده از چنین تعداد زیادی کاراکتر در رمزگذاری ندارند، با این حال، هنگام استفاده از UTF-32، وزن اسناد متنی را چهار برابر افزایش می دهند. برای هیچ، و در نتیجه، افزایش حجم ترافیک اینترنت و حجم داده های ذخیره شده. این مقدار زیادی است و هیچ کس نمی تواند چنین ضایعاتی را بپردازد. در نتیجه توسعه یونیکد، UTF-16، که آنقدر موفق بود که به عنوان فضای پایه پیش فرض برای همه کاراکترهایی که استفاده می کنیم پذیرفته شد. از دو بایت برای رمزگذاری یک کاراکتر استفاده می کند. بیایید ببینیم این چیز چگونه به نظر می رسد. در سیستم عامل ویندوز می توانید از مسیر "شروع" - "برنامه ها" - "لوازم جانبی" - "ابزار" - "جدول کاراکتر" بروید. در نتیجه، جدولی با اشکال برداری از تمام فونت های نصب شده در سیستم شما باز می شود. اگر مجموعه کاراکترهای یونیکد را در «گزینههای پیشرفته» انتخاب کنید، میتوانید برای هر فونت بهطور جداگانه کل محدوده کاراکترهای موجود در آن را ببینید. ضمناً با کلیک بر روی هر یک از آنها می توانید دو بایت آن را مشاهده کنید کد با فرمت UTF-16، متشکل از چهار رقم هگزادسیمال:![](https://i1.wp.com/info.javarush.ru/uploads/images/00/65/20/2015/12/15/eb4be3.png)
Krakozyabry به جای حروف روسی - نحوه تعمیر
حال ببینیم چگونه krakozyabras به جای متن ظاهر می شود، یا به عبارت دیگر، چگونه رمزگذاری صحیح برای متن روسی انتخاب می شود. در واقع، در برنامه ای تنظیم می شود که در آن شما همین متن یا کد را با استفاده از قطعات متن ایجاد یا ویرایش می کنید. برای ویرایش و ایجاد فایل های متنی، من شخصا از یک ویرایشگر Html و PHP ++ Notepad بسیار خوب به نظر خودم استفاده می کنم. با این حال، می تواند سینتکس صد زبان برنامه نویسی و نشانه گذاری دیگر را برجسته کند، و همچنین این قابلیت را دارد که با استفاده از افزونه ها گسترش یابد. بررسی دقیق این برنامه فوق العاده را در لینک زیر بخوانید. در منوی بالای Notepad ++ یک مورد "Encodings" وجود دارد، که در آن شما این فرصت را خواهید داشت که به طور پیش فرض یک گزینه موجود را به گزینه مورد استفاده در سایت خود تبدیل کنید:![](https://i2.wp.com/info.javarush.ru/uploads/images/00/65/20/2015/12/15/f7e151.png)
دلیل اینکه بفهمیم UTF-8 چگونه کار می کند و یونیکد چیست، این واقعیت است که VBScript عملکردهای داخلی برای کار با UTF-8 ندارد. و از آنجایی که چیزی کارساز پیدا نکردم، مجبور شدم خودم آن را بنویسم / اضافه کنم. تجربه به نظر من در هر صورت مفید است. برای درک بهتر، از تئوری شروع می کنم.
درباره یونیکد
قبل از ظهور یونیکد، رمزگذاری های 8 بیتی به طور گسترده ای مورد استفاده قرار می گرفتند که معایب اصلی آن آشکار است:- فقط 255 کاراکتر، و حتی پس از آن برخی از آنها گرافیکی نیستند.
- امکان باز کردن یک سند با رمزگذاری متفاوتی که در آن ایجاد شده است.
- برای هر کدگذاری باید فونت ایجاد شود.
درباره UTF-8
یک بار فکر کردم که یونیکد وجود دارد، اما UTF-8 وجود دارد. بعداً فهمیدم اشتباه کردم.UTF-8 فقط یک نمایش 8 بیتی از یونیکد است. کاراکترهای با کدهای کمتر از 128 با یک بایت نمایش داده می شوند و از آنجایی که آنها ASCII را در یونیکد تکرار می کنند، متنی که فقط با این کاراکترها نوشته می شود متن در ASCII خواهد بود. کاراکترهای با کدهای 128 در 2 بایت با کدهای 2048 - 3، از 65536 - 4 کدگذاری می شوند. بنابراین می توان به 6 بایت رسید، اما چیزی برای رمزگذاری با آنها وجود ندارد.
0x00000000 - 0x0000000000 - 0XXXXXXX 0x00000080 - 0x000007FF: 110xxxxxx 10xxxxxx 0X00000800 - 0x0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF: 1110xxxxx 0x000100000 - 0xxxxxx01xxxxxx: 0x01xxx1xxxxxx: 0x01xxxx1xxxxxx
رمزگذاری در UTF-8
رویه چیزی شبیه به این است:- هر کاراکتر به یونیکد تبدیل می شود.
- بررسی می کنیم از کدام کاراکتر محدوده.
- اگر کد کاراکتر کمتر از 128 باشد، آن را بدون تغییر به نتیجه اضافه می کنیم.
- اگر کد کاراکتر کمتر از 2048 باشد، 6 بیت آخر و 5 بیت اول کد کاراکتر را می گیریم. به 5 بیت اول 0xC0 اضافه می کنیم و بایت اول دنباله را می گیریم و 0x80 را به 6 بیت آخر اضافه می کنیم و بایت دوم را می گیریم. الحاق می کنیم و به نتیجه اضافه می کنیم.
- به طور مشابه، ما می توانیم برای کدهای بزرگ ادامه دهیم، اما اگر کاراکتر خارج از U+FFFF باشد، باید با جانشین های UTF-16 مقابله کنیم.
رمزگشایی UTF-8
- ما به دنبال اولین کاراکتر فرم 11xxxxxx هستیم
- ما تمام بایت های بعدی فرم را 10xxxxxx می شماریم
- اگر دنباله ای از دو بایت و اولین بایت به شکل 110xxxxx باشد، پیشوندها را قطع کرده و با هم جمع می کنیم و اولین بایت را در 0x40 ضرب می کنیم.
- به طور مشابه برای دنباله های طولانی تر.
- کل دنباله را با کاراکتر یونیکد مورد نظر جایگزین می کنیم.