نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی

رمزگذاری utf 8. رمزگذاری HTML

مجموعه شخصیت ها را تنظیم کنید

متا تگ

شما باید یک متا تگ مخصوص به هر صفحه (یا الگوی هدر) اضافه کنید که به مرورگر می گوید از کدام مجموعه کاراکتر برای نمایش متون استفاده کند. این تگ استاندارد است و معمولاً به شکل زیر است:

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
نمادیونیکدUTF-8CP-1251
شستن.دهشستن.ده
آ0410 1040 D090208 144 192
ب0411 1041 D091208 145 193
V0412 1042 D092208 146 194
جی0413 1043 D093208 147 195
دی0414 1044 D094208 148 196
E0415 1045 D095208 149 197
اف0416 1046 D096208 150 198
دبلیو0417 1047 D097208 151 199
و0418 1048 D098208 152 200
Y0419 1049 D099208 153 201
به041A1050 D09A208 154 202
L041B1051 D09B208 155 203
م041C1052 D09C208 156 204
اچ041D1053 D09D208 157 205
O041E1054 D09E208 158 206
پ041F1055 D09F208 159 207
آر0420 1056 D0A0208 160 208
با0421 1057 D0A1208 161 209
تی0422 1058 D0A2208 162 210
در0423 1059 D0A3208 163 211
اف0424 1060 D0A4208 164 212
ایکس0425 1061 D0A5208 165 213
سی0426 1062 D0A6208 166 214
اچ0427 1063 D0A7208 167 215
دبلیو0428 1064 D0A8208 168 216
SCH0429 1065 D0A9208 169 217
کومرسانت042A1066 D0AA208 170 218
اس042B1067 D0AB208 171 219
ب042C1068 D0AC208 172 220
E042D1069 D0AD208 173 221
YU042E1070 D0AE208 174 222
من هستم042F1071 D0AF208 175 223
آ0430 1072 D0B0208 176 224
ب0431 1073 D0B1208 177 225
v0432 1074 D0B2208 178 226
جی0433 1075 D0B3208 179 227
د0434 1076 D0B4208 180 228
ه0435 1077 D0B5208 181 229
خوب0436 1078 D0B6208 182 230
ساعت0437 1079 D0B7208 183 231
و0438 1080 D0B8208 184 232
هفتم0439 1081 D0B9208 185 233
به043A1082 D0BA208 186 234
ل043B1083 D0BB208 187 235
متر043C1084 D0BC208 188 236
n043D1085 D0BD208 189 237
O043E1086 D0BE208 190 238
پ043F1087 D0BF208 191 239
آر0440 1088 D180209 128 240
با0441 1089 D181209 129 241
تی0442 1090 D182209 130 242
در0443 1091 D183209 131 243
f0444 1092 D184209 132 244
ایکس0445 1093 D185209 133 245
ج0446 1094 D186209 134 246
ساعت0447 1095 D187209 135 247
w0448 1096 D188209 136 248
SCH0449 1097 D189209 137 249
ب044A1098 D18A209 138 250
س044B1099 D18B209 139 251
ب044C1100 D18C209 140 252
اوه044D1101 D18D209 141 253
یو044E1102 D18E209 142 254
من هستم044F1103 D18F209 143 255
شخصیت های خارج از قاعده کلی
یو0401 1025 D001208 101 168
یو0451 1025 D191209 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، برخی از کاراکترهای خدماتی مانند براکت، میله، ستاره و غیره وجود داشت. در واقع، شما می توانید آنها را خودتان ببینید:
این 128 کاراکتر از نسخه اصلی ASCII هستند که به استاندارد تبدیل شده اند و در هر کدگذاری دیگری قطعاً آنها را ملاقات خواهید کرد و آنها به این ترتیب خواهند ایستاد. اما واقعیت این است که با کمک یک بایت اطلاعات، می توان نه 128، بلکه 256 مقدار مختلف (دو به توان هشت برابر با 256) رمزگذاری کرد، بنابراین پس از نسخه پایه آسوکا، یک سری کامل از رمزگذاری های ASCII توسعه یافته، که در آن علاوه بر 128 کاراکتر اصلی، امکان رمزگذاری نمادهای رمزگذاری ملی (مثلاً روسی) نیز وجود داشت. در اینجا، احتمالاً ارزش دارد که در مورد سیستم های اعدادی که در توضیحات استفاده می شود کمی بیشتر صحبت کنیم. در مرحله اول، همانطور که همه شما می دانید، یک کامپیوتر فقط با اعداد در سیستم دودویی کار می کند، یعنی با صفر و یک ("جبر بولی"، اگر کسی در یک موسسه یا مدرسه درس خوانده باشد). یک بایت از هشت بیت تشکیل شده است که هر یک از آنها دو به توان دو است که از صفر شروع می شود و در بیت هفتم به دو بیت می رسد:
درک اینکه تنها 256 از همه ترکیب های ممکن از صفر و یک می تواند در چنین ساختاری وجود داشته باشد دشوار نیست.تبدیل یک عدد از باینری به اعشاری بسیار ساده است. شما فقط باید تمام قدرت های دو را جمع آوری کنید، که بیش از آن ها یکی هستند. در مثال ما، این 1 (2 به توان صفر) به اضافه 8 (دو به توان 3)، به اضافه 32 (دو به پنجم)، به اضافه 64 (به ششم)، به اضافه 128 (به هفتم) است. . مجموع در نماد اعشاری 233 می شود. همانطور که می بینید، همه چیز بسیار ساده است. اما اگر به جدول با کاراکترهای ASCII نگاه دقیق تری بیندازید، خواهید دید که آنها در کدگذاری هگزا دسیمال نشان داده شده اند. به عنوان مثال، "ستاره" در Asci با عدد هگزادسیمال 2A مطابقت دارد. احتمالاً می دانید که سیستم اعداد هگزادسیمال علاوه بر اعداد عربی از حروف لاتین A (به معنی ده) تا F (به معنای پانزده) نیز استفاده می کند. خوب، برای تبدیل باینری به هگزادسیمالبه روش ساده و بصری زیر متوسل شوید. همانطور که در تصویر بالا نشان داده شده است، هر بایت اطلاعات به دو قسمت چهار بیتی تقسیم می شود. که در هر نیم بایت، فقط شانزده مقدار را می توان در کد باینری (دو تا توان چهارم) کدگذاری کرد، که به راحتی می توان آن را به عنوان یک عدد هگزادسیمال نشان داد. علاوه بر این، در نیمه سمت چپ بایت، باید دوباره درجه ها را بشمارید، با شروع از صفر، و نه همانطور که در تصویر نشان داده شده است. در نتیجه با محاسبات ساده دریافتیم که عدد E9 در اسکرین شات کدگذاری شده است. امیدوارم مسیر استدلال من و راه حل این معما برای شما روشن شده باشد. خوب، اکنون اجازه دهید در واقع به صحبت در مورد رمزگذاری متن ادامه دهیم.

نسخه های توسعه یافته Asuka - رمزگذاری CP866 و KOI8-R با شبه نگاری

بنابراین، ما شروع به صحبت در مورد ASCII کردیم، که، همانطور که بود، نقطه شروع برای توسعه همه رمزگذاری های مدرن (ویندوز 1251، یونیکد، UTF 8) بود. در ابتدا فقط حاوی 128 کاراکتر از الفبای لاتین، اعداد عربی و چیزهای دیگر بود، اما در نسخه توسعه یافته امکان استفاده از تمام 256 مقداری که می توان در یک بایت اطلاعات رمزگذاری کرد، فراهم شد. آن ها اضافه کردن کاراکترهای حروف زبان خود به Asci امکان پذیر شد. در اینجا لازم است مجدداً برای توضیح منحرف شویم - چرا اصلاً به رمزگذاری متن نیاز دارید؟و چرا اینقدر مهم است نمادها بر روی صفحه نمایش رایانه شما بر اساس دو چیز تشکیل می شوند - مجموعه ای از اشکال برداری (نمایش) از انواع کاراکترها (آنها در فایل هایی با فونت هایی قرار دارند که روی رایانه شما نصب شده اند) و کدی که به شما امکان می دهد آن را بیرون بکشید. دقیقاً همان یکی از این مجموعه اشکال برداری (فایل فونت) کاراکتری که باید در محل صحیح درج شود. واضح است که فونت ها مسئول خود فرم های برداری هستند، اما سیستم عامل و برنامه های استفاده شده در آن وظیفه رمزگذاری را بر عهده دارند. آن ها هر متنی در رایانه شما مجموعه ای از بایت ها خواهد بود که هر کدام یک کاراکتر از همین متن را رمزگذاری می کند. برنامه ای که این متن را روی صفحه نمایش می دهد (ویرایشگر متن، مرورگر و ...)، هنگام تجزیه کد، رمزگذاری کاراکتر بعدی را می خواند و به دنبال فرم برداری مربوطه در فایل فونت مورد نظر می گردد که برای نمایش این متن متصل است. سند همه چیز ساده و پیش پا افتاده است. این بدان معنی است که برای رمزگذاری هر کاراکتری که نیاز داریم (مثلاً از الفبای ملی)، دو شرط باید رعایت شود - شکل برداری این کاراکتر باید با فونت استفاده شده باشد و این کاراکتر می تواند در رمزگذاری های ASCII توسعه یافته رمزگذاری شود. در یک بایت بنابراین، یک دسته کامل از این گزینه ها وجود دارد. فقط برای رمزگذاری کاراکترهای زبان روسی، انواع مختلفی از Aska توسعه یافته وجود دارد. به عنوان مثال، در ابتدا وجود داشت CP866، که در آن امکان استفاده از حروف الفبای روسی وجود داشت و نسخه توسعه یافته ASCII بود. آن ها قسمت بالای آن کاملاً با نسخه اصلی Asuka (128 کاراکتر لاتین، اعداد و سایر موارد مزخرف) مطابقت داشت که در تصویر بالا نشان داده شده است، اما قسمت پایین جدول با رمزگذاری CP866 شکلی را داشت که در تصویر زیر نشان داده شده است. و مجاز به رمزگذاری 128 علامت دیگر (حروف روسی و انواع شبه نگاری در آنجا):
ببینید، در ستون سمت راست، اعداد با 8 شروع می شوند، زیرا اعداد از 0 تا 7 به قسمت پایه ASCII اشاره می کنند (به تصویر اول مراجعه کنید). که حرف روسی "M" در CP866 دارای کد 9C خواهد بود (در تقاطع ردیف مربوطه با 9 و ستون با عدد C در سیستم اعداد هگزادسیمال قرار دارد) که می تواند در یک بایت اطلاعات نوشته شود. و در صورت وجود فونت مناسب با حروف روسی این حرف بدون مشکل در متن نمایش داده می شود. این مبلغ از کجا آمده است؟ شبه نگاری در CP866? نکته این است که این رمزگذاری برای متن روسی در آن سال های خزدار توسعه یافته بود، زمانی که چنین توزیعی از سیستم عامل های گرافیکی مانند اکنون وجود نداشت. و در Dosa و سیستم‌عامل‌های متنی مشابه، شبه گرافیک‌ها این امکان را به وجود می‌آورد که به نحوی طراحی متون را متنوع کنید، و بنابراین در CP866 و سایر همتایان آن از دسته نسخه‌های توسعه‌یافته Asuka فراوان است. CP866 توسط IBM توزیع شد، اما علاوه بر این، تعدادی رمزگذاری برای کاراکترهای روسی توسعه داده شد، به عنوان مثال، می توان به همان نوع (ASCII توسعه یافته) نسبت داد. KOI8-R:
اصل عملکرد آن مانند CP866 است که کمی پیشتر توضیح داده شد - هر کاراکتر متن توسط یک بایت واحد رمزگذاری می شود. اسکرین شات نیمه دوم جدول KOI8-R را نشان می دهد، زیرا نیمه اول کاملاً مطابق با Asuka اصلی است که در اولین تصویر در این مقاله نشان داده شده است. از جمله ویژگی های رمزگذاری KOI8-R می توان به این نکته اشاره کرد که حروف روسی در جدول آن به ترتیب حروف الفبا نیستند، همانطور که برای مثال در CP866 انجام شد. اگر به اولین اسکرین شات (قسمت پایه، که در تمام رمزگذاری های توسعه یافته موجود است) نگاه کنید، متوجه خواهید شد که در KOI8-R حروف روسی در همان سلول های جدول قرار دارند که حروف همخوان الفبای لاتین قرار دارند. با آنها از قسمت اول جدول. این کار برای راحتی جابجایی از حروف روسی به لاتین با حذف تنها یک بیت (دو به توان هفتم یا 128) انجام شد.

ویندوز 1251 - نسخه مدرن ASCII و چرا krakozyabry خزیدن

توسعه بیشتر رمزگذاری متن به این دلیل بود که سیستم عامل های گرافیکی محبوبیت بیشتری پیدا کردند و نیاز به استفاده از شبه نگاری در آنها با گذشت زمان از بین رفت. در نتیجه، یک گروه کامل بوجود آمد، که در اصل، هنوز نسخه های توسعه یافته Asuka بودند (یک کاراکتر متنی تنها با یک بایت اطلاعات رمزگذاری شده است)، اما بدون استفاده از کاراکترهای شبه. آنها متعلق به کدهای به اصطلاح ANSI بودند که توسط مؤسسه استانداردهای آمریکایی توسعه یافتند. در اصطلاح رایج، نام سیریلیک نیز برای نوع با پشتیبانی از زبان روسی استفاده می شود. نمونه ای از این دست می تواند باشد ویندوز 1251. این به طور مطلوب با CP866 و KOI8-R که قبلاً استفاده شده بود مقایسه می شود زیرا مکان نمادهای شبه نگاری در آن توسط نمادهای گمشده تایپوگرافی روسی (به غیر از علامت لهجه) و همچنین نمادهای استفاده شده در زبان های اسلاوی نزدیک به روسی (اوکراینی، بلاروسی و غیره).
به دلیل انبوهی از رمزگذاری های زبان روسی، تولیدکنندگان فونت و تولیدکنندگان نرم افزار دائماً دچار سردرد می شدند و ما، خوانندگان عزیز، اغلب از موارد بسیار بدنام خارج می شدیم. کراکوزیابریزمانی که با نسخه استفاده شده در متن سردرگمی وجود داشت. اغلب آنها هنگام ارسال و دریافت پیام از طریق ایمیل خارج می شدند که منجر به ایجاد جداول تبدیل بسیار پیچیده می شد که در واقع نمی توانست این مشکل را ریشه ای حل کند و اغلب کاربران از نویسه گردانی حروف لاتین برای مکاتبات استفاده می کردند. به منظور جلوگیری از krakozyabry بدنام هنگام استفاده از رمزگذاری های روسی مانند CP866، KOI8-R یا Windows 1251. در واقع، اشکالاتی که به جای متن روسی ظاهر می شود، نتیجه استفاده نادرست از رمزگذاری این زبان است که با آن مطابقت نداشت. یکی که در آن پیام متنی در ابتدا کدگذاری شده بود. به عنوان مثال، اگر سعی کنید کاراکترهای رمزگذاری شده با استفاده از CP866 را با استفاده از جدول کد ویندوز 1251 نمایش دهید، همان krakozyabry (مجموعه کاراکترهای بی معنی) ظاهر می شود و کاملاً جایگزین متن پیام می شود. وضعیت مشابهی اغلب هنگام ایجاد و پیکربندی سایت‌ها، انجمن‌ها یا وبلاگ‌ها رخ می‌دهد، زمانی که متن با حروف روسی به اشتباه در رمزگذاری اشتباهی که به‌طور پیش‌فرض در سایت استفاده می‌شود ذخیره می‌شود، یا در ویرایشگر متن اشتباهی که گگ نامرئی به کد اضافه می‌کند. چشم غیر مسلح در پایان، بسیاری از مردم از چنین وضعیتی با رمزگذاری های زیاد خسته شدند و مدام از کراکوزیابری بیرون آمدند، پیش نیازهایی برای ایجاد یک تنوع جهانی جدید وجود داشت که جایگزین همه موارد موجود شود و در نهایت مشکل را با ظاهر متون ناخوانا حل کند. . علاوه بر این، مشکل زبان هایی مانند چینی وجود داشت که نویسه های زبان بسیار بیشتر از 256 بود.

یونیکد (یونیکد) - رمزگذاری جهانی UTF 8، 16 و 32

این هزاران کاراکتر گروه زبانی آسیای جنوب شرقی را نمی‌توان به هیچ وجه در یک بایت اطلاعات توصیف کرد، که برای رمزگذاری کاراکترها در نسخه‌های توسعه‌یافته ASCII اختصاص داده شده بود. در نتیجه کنسرسیومی فراخوان داد یونیکد(یونیکد - کنسرسیوم یونیکد) با همکاری بسیاری از رهبران صنعت فناوری اطلاعات (کسانی که نرم افزار تولید می کنند، سخت افزار رمزگذاری می کنند، فونت ایجاد می کنند)، که علاقه مند به ظهور یک رمزگذاری متن جهانی بودند. اولین نسخه ای که تحت نظارت کنسرسیوم یونیکد منتشر شد، بود UTF-32. عدد در نام رمزگذاری به معنای تعداد بیت هایی است که برای رمزگذاری یک کاراکتر استفاده می شود. 32 بیت 4 بایت اطلاعات است که برای رمزگذاری یک کاراکتر در UTF جدید رمزگذاری جهانی مورد نیاز است. در نتیجه، همان فایل با متن، کدگذاری شده در نسخه توسعه یافته ASCII و در UTF-32، در مورد دوم دارای اندازه (وزن) چهار برابر بزرگتر خواهد بود. این بد است، اما اکنون این فرصت را داریم که با استفاده از UTF تعداد کاراکترهای برابر با دو به توان سی و دوم را رمزگذاری کنیم ( میلیاردها شخصیت، که هر مقدار واقعاً ضروری را با حاشیه زیادی پوشش می دهد). اما بسیاری از کشورهای دارای زبان های گروه اروپایی اصلاً نیازی به استفاده از چنین تعداد زیادی کاراکتر در رمزگذاری ندارند، با این حال، هنگام استفاده از UTF-32، وزن اسناد متنی را چهار برابر افزایش می دهند. برای هیچ، و در نتیجه، افزایش حجم ترافیک اینترنت و حجم داده های ذخیره شده. این مقدار زیادی است و هیچ کس نمی تواند چنین ضایعاتی را بپردازد. در نتیجه توسعه یونیکد، UTF-16، که آنقدر موفق بود که به عنوان فضای پایه پیش فرض برای همه کاراکترهایی که استفاده می کنیم پذیرفته شد. از دو بایت برای رمزگذاری یک کاراکتر استفاده می کند. بیایید ببینیم این چیز چگونه به نظر می رسد. در سیستم عامل ویندوز می توانید از مسیر "شروع" - "برنامه ها" - "لوازم جانبی" - "ابزار" - "جدول کاراکتر" بروید. در نتیجه، جدولی با اشکال برداری از تمام فونت های نصب شده در سیستم شما باز می شود. اگر مجموعه کاراکترهای یونیکد را در «گزینه‌های پیشرفته» انتخاب کنید، می‌توانید برای هر فونت به‌طور جداگانه کل محدوده کاراکترهای موجود در آن را ببینید. ضمناً با کلیک بر روی هر یک از آنها می توانید دو بایت آن را مشاهده کنید کد با فرمت UTF-16، متشکل از چهار رقم هگزادسیمال: چند کاراکتر را می توان در UTF-16 با استفاده از 16 بیت کدگذاری کرد؟ 65536 (دو به توان شانزده)، و این عدد بود که به عنوان فضای پایه در یونیکد پذیرفته شد. علاوه بر این، راه هایی برای رمزگذاری با آن حدود دو میلیون کاراکتر وجود دارد، اما محدود به فضای گسترده ای از یک میلیون کاراکتر متن است. اما حتی این نسخه موفق رمزگذاری یونیکد رضایت زیادی را برای کسانی که مثلاً برنامه ها را فقط به زبان انگلیسی می نوشتند، به همراه نداشت، زیرا پس از انتقال از نسخه توسعه یافته ASCII به UTF-16، وزن اسناد دو برابر شد (یک بایت در هر بایت). یک کاراکتر در Asci و دو بایت در هر کاراکتر در UTF-16). این برای رضایت همه و همه چیز در کنسرسیوم یونیکد تصمیم گرفته شد یک رمزگذاری ایجاد کنیدطول متغیر. UTF-8 نام دارد. با وجود هشت در نام، واقعا طول متغیری دارد، یعنی. هر کاراکتر متنی را می توان به دنباله ای از یک تا شش بایت کدگذاری کرد. در عمل، در UTF-8، فقط از محدوده یک تا چهار بایت استفاده می شود، زیرا در پشت چهار بایت کد، حتی از نظر تئوری هیچ چیزی قابل تصور نیست. تمام حروف لاتین موجود در آن در یک بایت کدگذاری می شوند، درست مانند ASCII خوب قدیمی. قابل توجه است، در مورد رمزگذاری فقط لاتین، حتی برنامه هایی که یونیکد را درک نمی کنند، همچنان آنچه را که در UTF-8 کدگذاری شده است، می خوانند. آن ها بخش اصلی Asuka به سادگی به این زاده فکری کنسرسیوم یونیکد منتقل شد. کاراکترهای سیریلیک در UTF-8 در دو بایت و برای مثال کاراکترهای گرجی در سه بایت کدگذاری می شوند. کنسرسیوم یونیکد، پس از ایجاد UTF 16 و 8، مشکل اصلی را حل کرد - اکنون ما داریم فونت ها یک فضای کد واحد دارند. و اکنون سازندگان آنها فقط می توانند آن را با فرم های برداری از کاراکترهای متنی بر اساس نقاط قوت و قابلیت های خود پر کنند. در "جدول کاراکترها" بالا، می توانید ببینید که فونت های مختلف از تعداد کاراکترهای متفاوتی پشتیبانی می کنند. برخی از فونت های غنی از یونیکد می توانند بسیار بزرگ باشند. اما اکنون تفاوت آنها در این نیست که برای رمزگذاری های مختلف ایجاد شده اند، بلکه در این واقعیت است که سازنده فونت فضای کد واحد را با یک یا آن فرم بردار تا انتها پر کرده یا پر نکرده است.

Krakozyabry به جای حروف روسی - نحوه تعمیر

حال ببینیم چگونه krakozyabras به جای متن ظاهر می شود، یا به عبارت دیگر، چگونه رمزگذاری صحیح برای متن روسی انتخاب می شود. در واقع، در برنامه ای تنظیم می شود که در آن شما همین متن یا کد را با استفاده از قطعات متن ایجاد یا ویرایش می کنید. برای ویرایش و ایجاد فایل های متنی، من شخصا از یک ویرایشگر Html و PHP ++ Notepad بسیار خوب به نظر خودم استفاده می کنم. با این حال، می تواند سینتکس صد زبان برنامه نویسی و نشانه گذاری دیگر را برجسته کند، و همچنین این قابلیت را دارد که با استفاده از افزونه ها گسترش یابد. بررسی دقیق این برنامه فوق العاده را در لینک زیر بخوانید. در منوی بالای Notepad ++ یک مورد "Encodings" وجود دارد، که در آن شما این فرصت را خواهید داشت که به طور پیش فرض یک گزینه موجود را به گزینه مورد استفاده در سایت خود تبدیل کنید:
در مورد سایت روی جوملا 1.5 و بالاتر و همچنین در مورد وبلاگ در وردپرس، برای جلوگیری از بروز اشکال، گزینه را انتخاب کنید. UTF8 بدون BOM. پیشوند BOM چیست؟ واقعیت این است که هنگامی که آنها رمزگذاری UTF-16 را توسعه دادند، به دلایلی تصمیم گرفتند چیزی مانند توانایی نوشتن یک کد کاراکتر، هم به ترتیب مستقیم (به عنوان مثال، 0A15) و هم به صورت معکوس (150A) به آن متصل کنند. . و برای اینکه برنامه ها بفهمند کدها را در کدام دنباله بخوانند، اختراع شد BOM(Byte Order Mark یا به عبارتی امضا) که با افزودن سه بایت اضافی به همان ابتدای اسناد بیان می شد. در رمزگذاری UTF-8، هیچ BOM در کنسرسیوم یونیکد پیش بینی نشده بود، و بنابراین افزودن یک امضا (این بدنام ترین سه بایت اضافی به ابتدای سند) به سادگی از خواندن کد برخی از برنامه ها جلوگیری می کند. بنابراین، هنگام ذخیره فایل ها در UTF، همیشه باید گزینه بدون BOM (بدون امضا) را انتخاب کنیم. بنابراین شما پیشروی می کنید خود را از خزیدن krakozyabry محافظت کنید. قابل توجه است که برخی از برنامه های ویندوز نمی دانند چگونه این کار را انجام دهند (آنها نمی توانند متن را در UTF-8 بدون BOM ذخیره کنند)، به عنوان مثال، همان Notepad بدنام ویندوز. سند را در UTF-8 ذخیره می کند، اما همچنان امضا (سه بایت اضافی) را به ابتدای آن اضافه می کند. علاوه بر این، این بایت ها همیشه یکسان خواهند بود - کد را به ترتیب مستقیم بخوانید. اما در سرورها، به دلیل این چیز کوچک، ممکن است مشکلی ایجاد شود - krakozyabry بیرون خواهد آمد. بنابراین، به هیچ وجه از دفترچه یادداشت معمولی ویندوز استفاده نکنیدبرای ویرایش اسناد سایت خود، اگر ظاهر کراکوزیابروف را نمی خواهید. من ویرایشگر Notepad ++ را که قبلاً ذکر شد بهترین و ساده ترین گزینه می دانم که عملاً هیچ ایرادی ندارد و فقط از مزایایی برخوردار است. در Notepad++، زمانی که رمزگذاری را انتخاب می کنید، این گزینه را خواهید داشت که متن را به کدگذاری UCS-2 تبدیل کنید، که ذاتاً بسیار نزدیک به استاندارد یونیکد است. همچنین در Notepad امکان رمزگذاری متن در ANSI وجود خواهد داشت. در رابطه با زبان روسی این ویندوز 1251 خواهد بود که قبلاً کمی در بالا توضیح دادیم این اطلاعات از کجا آمده است؟ در رجیستری سیستم عامل ویندوز شما نوشته شده است - در مورد ANSI کدام کد را انتخاب کنید، در مورد OEM کدام را انتخاب کنید (برای زبان روسی CP866 خواهد بود). اگر زبان پیش‌فرض دیگری را روی رایانه خود نصب کنید، این کدگذاری‌ها با زبان‌های مشابه از دسته ANSI یا OEM برای همان زبان جایگزین می‌شوند. پس از اینکه سند را در Notepad ++ در رمزگذاری مورد نیاز خود ذخیره کردید یا سند را از سایت برای ویرایش باز کردید، می توانید نام آن را در گوشه سمت راست پایین ویرایشگر مشاهده کنید: برای جلوگیری از krakozyabrov، علاوه بر اقداماتی که در بالا توضیح داده شد، نوشتن اطلاعات مربوط به این رمزگذاری در سربرگ کد منبع تمام صفحات سایت مفید خواهد بود تا هیچ سردرگمی در سرور یا میزبان محلی ایجاد نشود. به طور کلی در تمام زبان های نشانه گذاری فرامتن به جز Html از یک اعلان خاص xml استفاده می شود که کدگذاری متن را مشخص می کند.< ? xml version= "1.0" encoding= "windows-1251" ? >قبل از تجزیه کد، مرورگر می داند که از کدام نسخه استفاده می شود و دقیقاً چگونه کدهای کاراکتر آن زبان باید تفسیر شوند. اما آنچه قابل توجه است، اگر سند را در یونیکد پیش فرض ذخیره کنید، می توان این اعلان xml را حذف کرد (اگر BOM وجود نداشته باشد رمزگذاری UTF-8 یا اگر BOM وجود داشته باشد UTF-16 در نظر گرفته می شود). در مورد یک سند زبان Html، از رمزگذاری برای تعیین استفاده می شود عنصر متا، که بین تگ باز و بسته شدن سر نوشته می شود: < head> . . . < meta charset= "utf-8" > . . . < / head>این ورودی کاملاً با استاندارد موجود در Html 4.01 متفاوت است، اما کاملاً با استاندارد جدید Html 5 که به آرامی معرفی می شود مطابقت دارد و برای هر مرورگر در حال حاضر 100٪ به درستی درک می شود. در تئوری، عنصر Meta با کدگذاری Html سند بهتر است قرار داده شود تا حد امکان در هدر سندبه طوری که در زمان ملاقات در متن اولین کاراکتر نه از پایه ANSI (که همیشه به درستی و با هر گونه تغییری خوانده می شود)، مرورگر باید از قبل اطلاعاتی در مورد نحوه تفسیر کدهای این کاراکترها داشته باشد. لینک اول

دلیل اینکه بفهمیم UTF-8 چگونه کار می کند و یونیکد چیست، این واقعیت است که VBScript عملکردهای داخلی برای کار با UTF-8 ندارد. و از آنجایی که چیزی کارساز پیدا نکردم، مجبور شدم خودم آن را بنویسم / اضافه کنم. تجربه به نظر من در هر صورت مفید است. برای درک بهتر، از تئوری شروع می کنم.

درباره یونیکد

قبل از ظهور یونیکد، رمزگذاری های 8 بیتی به طور گسترده ای مورد استفاده قرار می گرفتند که معایب اصلی آن آشکار است:
  • فقط 255 کاراکتر، و حتی پس از آن برخی از آنها گرافیکی نیستند.
  • امکان باز کردن یک سند با رمزگذاری متفاوتی که در آن ایجاد شده است.
  • برای هر کدگذاری باید فونت ایجاد شود.
بنابراین، تصمیم گرفته شد یک استاندارد واحد برای یک رمزگذاری "گسترده" ایجاد شود که همه شخصیت ها را شامل شود (و در ابتدا می خواستند فقط شخصیت های معمولی را در آن بگنجانند، اما سپس نظر خود را تغییر دادند و شروع به اضافه کردن شخصیت های عجیب و غریب کردند). یونیکد از 1112064 نقطه کد (بیش از 16 بیت) استفاده می کند. ابتدا از ASCII کپی می کند و سپس بقیه حروف لاتین، سیریلیک، سایر حروف اروپایی و آسیایی را تکرار می کند. برای تعیین کاراکترها، نماد هگزادسیمال از فرم "U+xxxx" برای 65k اول و با ارقام بیشتر برای بقیه استفاده می شود.

درباره 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 مقابله کنیم.
تابع EncodeUTF8(s) Dim i, c, utfc, b1, b2, b3 برای i=1 به Len(s) c = ToLong(AscW(Mid(s,i,1))) اگر c< 128 Then utfc = chr(c) ElseIf c < 2048 Then b1 = c Mod &h40 b2 = (c - b1) / &h40 utfc = chr(&hC0 + b2) & chr(&h80 + b1) ElseIf c < 65536 And (c < 55296 Or c >57343) سپس b1 = c Mod &h40 b2 = ((c - b1) / &h40) Mod &h40 b3 = (c - b1 - (&h40 * b2)) / &h1000 utfc = chr(&hE0 + b3) & chr(&h80 + b2 ) & chr(&h80 + b1) در غیر این صورت " کوچک یا بزرگ UTF-16 جانشین utfc = Chr(&hEF) & Chr(&hBF) & Chr(&hBD) End If EncodeUTF8 = EncodeUTF8 + utfc تابع پایان بعدی تابع ToLong(Vint)< 0 Then ToLong = CLng(intVal) + &H10000 Else ToLong = CLng(intVal) End If End Function

رمزگشایی UTF-8

  • ما به دنبال اولین کاراکتر فرم 11xxxxxx هستیم
  • ما تمام بایت های بعدی فرم را 10xxxxxx می شماریم
  • اگر دنباله ای از دو بایت و اولین بایت به شکل 110xxxxx باشد، پیشوندها را قطع کرده و با هم جمع می کنیم و اولین بایت را در 0x40 ضرب می کنیم.
  • به طور مشابه برای دنباله های طولانی تر.
  • کل دنباله را با کاراکتر یونیکد مورد نظر جایگزین می کنیم.
تابع DecodeUTF8(s) Dim i, c, n, b1, b2, b3 i = 1 Do while i<= len(s) c = asc(mid(s,i,1)) If (c and &hC0) = &hC0 Then n = 1 Do While i + n <= len(s) If (asc(mid(s,i+n,1)) and &hC0) <>&h80 سپس از Do End خارج شوید اگر n = n + 1 حلقه اگر n = 2 و ((c و &hE0) = &hC0) سپس b1 = asc(mid(s,i+1,1)) و &h3F b2 = c و &h1F c = b1 + b2 * &h40 السیف n = 3 و ((c و &hF0) = &hE0) سپس b1 = asc(mid(s,i+2,1)) و &h3F b2 = asc(mid(s,i+1, 1)) و &h3F b3 = c و &h0F c = b3 * &H1000 + b2 * &H40 + b1 در غیر این صورت " نویسه بزرگتر از U+FFFF یا دنباله بد c = &hFFFD پایان اگر s = چپ(s,i-1) + chrw( c ) + mid(s,i+n) Elseif (c و &hC0) = &h80 سپس "بایت ادامه غیرمنتظره s = چپ(s,i-1) + chrw(&hFFFD) + mid(s,i+1) پایان اگر i = i + 1 Loop DecodeUTF8 = s تابع پایان

برترین مقالات مرتبط