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

رمزگذاری Ascii. سیستم های رمزگذاری متن

مجموعه کاراکترهایی که متن با آنها نوشته می شود نامیده می شود الفبا.

تعداد حروف الفبای اوست قدرت.

فرمول تعیین میزان اطلاعات: N = 2 b,

که در آن N اصل الفبا (تعداد کاراکترها) است.

ب - تعداد بیت ها (وزن اطلاعاتی کاراکتر).

حروف الفبا با ظرفیت 256 کاراکتر می تواند تقریباً تمام کاراکترهای لازم را در خود جای دهد. این الفبا نامیده می شود کافی

زیرا 256 = 2 8، سپس وزن 1 کاراکتر 8 بیت است.

واحد 8 بیتی نامگذاری شد 1 بایت:

1 بایت = 8 بیت.

کد باینری هر کاراکتر در متن کامپیوتر 1 بایت حافظه اشغال می کند.

اطلاعات متنی چگونه در حافظه کامپیوتر نمایش داده می شود؟

راحتی رمزگذاری بایت کاراکترها واضح است، زیرا یک بایت کوچکترین بخش آدرس پذیر حافظه است و بنابراین، پردازنده می تواند به هر کاراکتر جداگانه دسترسی داشته باشد و پردازش متن را انجام دهد. از سوی دیگر، 256 کاراکتر برای نشان دادن طیف گسترده ای از اطلاعات کاراکترها، عددی کاملاً کافی است.

حال این سوال پیش می آید که چه نوع کد باینری هشت بیتی را به هر کاراکتر مرتبط کنیم.

واضح است که این یک موضوع مشروط است، شما می توانید بسیاری از روش های رمزگذاری را ارائه دهید.

تمام کاراکترهای الفبای کامپیوتر از 0 تا 255 شماره گذاری شده اند. هر عدد مربوط به یک عدد هشت رقمی است. کد باینریاز 00000000 تا 11111111. این کد فقط عدد ترتیبی کاراکتر در سیستم دودوییحساب کردن

جدولی که در آن به تمام کاراکترهای الفبای کامپیوتر شماره سریال اختصاص داده می شود، جدول رمزگذاری نامیده می شود.

برای انواع مختلفکامپیوترها از جداول کدگذاری مختلفی استفاده می کنند.

استاندارد بین المللی رایانه شخصی به جدول تبدیل شده است ASCII(بخوانید asci) (آمریکایی کد استانداردبرای تبادل اطلاعات).

جدول ASCII به دو بخش تقسیم می شود.

استاندارد بین المللی فقط نیمه اول جدول است، یعنی. نمادها با اعداد از 0 (00000000)، تا 127 (01111111).

ساختار جدول کدگذاری اسکی

شماره سریال

کد

نماد

0 - 31

00000000 - 00011111

نمادهایی با اعداد از 0 تا 31 معمولاً کاراکترهای کنترل نامیده می شوند.
عملکرد آنها کنترل فرآیند نمایش متن روی صفحه یا چاپ، تغذیه است سیگنال صوتی، نشانه گذاری متن و غیره

32 - 127

00100000 - 01111111

قسمت استاندارد جدول (انگلیسی). این شامل حروف کوچک و بزرگ است الفبای لاتین، ارقام اعشاری، علائم نگارشی، انواع براکت، علامت های تجاری و غیره.
کاراکتر 32 یک فضا است، یعنی. جای خالی در متن
همه موارد دیگر در علائم خاصی منعکس می شوند.

128 - 255

10000000 - 11111111

قسمت جایگزین جدول (روسی).
نیمه دوم جدول کد ASCII، به نام صفحه کد (128 کد از 10000000 تا 11111111)، می تواند داشته باشد گزینه های مختلف، هر گزینه شماره مخصوص به خود را دارد.
صفحه کد در درجه اول برای قرار دادن الفبای ملی به غیر از لاتین استفاده می شود. در رمزگذاری های ملی روسیه، این قسمت از جدول حاوی نمادهای الفبای روسی است.

نیمه اول جدول ASCII


توجه شما را به این نکته جلب می کنم که در جدول رمزگذاری حروف (بزرگ و کوچک) به ترتیب حروف الفبا و اعداد به ترتیب مقادیر به صورت صعودی مرتب شده اند. به این رعایت نظم واژگانی در چینش حروف، اصل رمزگذاری ترتیبی الفبا می گویند.

برای حروف الفبای روسی، اصل کدگذاری متوالی نیز رعایت می شود.

نیمه دوم جدول ASCII


متأسفانه، در حال حاضر پنج رمزگذاری سیریلیک مختلف (KOI8-R، Windows. MS-DOS، Macintosh و ISO) وجود دارد. به همین دلیل، اغلب با انتقال متن روسی از یک رایانه به رایانه دیگر، از یک رایانه، مشکلاتی ایجاد می شود سیستم نرم افزاریبه دیگری.

از نظر زمانی، یکی از اولین استانداردها برای رمزگذاری حروف روسی در رایانه، KOI8 ("کد تبادل اطلاعات، 8 بیت") بود. این رمزگذاری در دهه 70 در رایانه های سری رایانه های ES مورد استفاده قرار گرفت و از اواسط دهه 80 در اولین نسخه های روسی شده سیستم عامل یونیکس استفاده شد.

از ابتدای دهه 90، زمان تسلط سیستم عامل MS DOS، رمزگذاری CP866 باقی می ماند ("CP" مخفف "Code Page" است).

کامپیوترها سیبتحت کنترل اتاق عمل عمل می کند سیستم های مکسیستم عامل، از رمزگذاری مک خود استفاده کنید.

علاوه بر این، سازمان بین المللی استاندارد (سازمان بین المللی استاندارد، ISO) کدگذاری دیگری به نام ISO 8859-5 را به عنوان استاندارد برای زبان روسی تأیید کرد.

رایج ترین آن در حال حاضر است رمزگذاری مایکروسافتویندوز با نام اختصاری CP1251.

از اواخر دهه 90، مشکل استانداردسازی کدنویسی کاراکترها با معرفی یک استاندارد بین المللی جدید به نام حل شد. یونیکد... این یک رمزگذاری 16 بیتی است. برای هر کاراکتر 2 بایت حافظه اختصاص می دهد. البته این میزان حافظه استفاده شده را دو برابر می کند. اما از طرف دیگر، چنین جدول کدی امکان گنجاندن حداکثر 65536 کاراکتر را فراهم می کند. مشخصات کامل استاندارد یونیکدشامل تمام الفبای موجود، منقرض شده و مصنوعی جهان، و همچنین بسیاری از نمادهای ریاضی، موسیقی، شیمیایی و غیره است.

بیایید سعی کنیم از جدول ASCII استفاده کنیم تا تصور کنیم کلمات در حافظه کامپیوتر چگونه به نظر می رسند.

نمایش داخلی کلمات در حافظه کامپیوتر

گاهی اوقات اتفاق می افتد که متنی متشکل از حروف الفبای روسی که از رایانه دیگری دریافت شده است، قابل خواندن نیست - نوعی "بیهوده" روی صفحه نمایش مانیتور قابل مشاهده است. این به دلیل این واقعیت است که رایانه ها از رمزگذاری متفاوتی از شخصیت های زبان روسی استفاده می کنند.

رمزگذاری متن

رمزگذاری متن ایجاد یک جدول مطابقت بین کاراکتر رمزگذاری شده و ترکیب وضعیت بیت ها است، یعنی فرآیند رمزگذاری شامل این واقعیت است که هر کاراکتر اختصاص داده می شود. کد منحصر به فرد... در حال حاضر، سیستم های کدگذاری مختلفی وجود دارد، تفاوت اصلی بین آنها تعداد بیت های مورد نیاز برای رمزگذاری یک کاراکتر است.

اسکی (آمریکایی کد استانداردبرای تبادل اطلاعات): برای رمزگذاری یک کاراکتر، مقدار اطلاعات = 7 بیت استفاده می شود. اگر نمادها را به عنوان رویدادهای ممکن در نظر بگیریم (به سخنرانی 1 مراجعه کنید)، آنگاه می توانیم تعداد نمادهایی را که می توان رمزگذاری کرد محاسبه کرد:

2*26-نامه ها

32-شخصیت های مختلف

34 کاراکتر سرویس

128 کاراکتری

بنابراین، تعداد کاراکترهای رمزگذاری شده محدود است، بنابراین رمزگذاری حروف الفبای روسی در سیستم رمزگذاری هفت بیتی غیرممکن است. وظیفه به تصویر کشیدن هم‌زمان حروف روسی و لاتین به وجود آمد. راه های حل این مشکل عبارتند از نویسه گردانی و گسترش رمزگذاری.

سیستم های کدگذاری هشت بیتی:

اگر مهم ترین بیت کد 0 باشد، سیستم رمزگذاری با ASCII منطبق است، اگر مهم ترین بیت -1 باشد، صفحات کد اضافی وارد می شوند.

در روسیه یکی از این سیستم ها KOI-8 ایجاد شد که عیب آن این است که حروف روسی بر اساس حروف الفبا چیده نشده اند، علاوه بر این، CP-866، CP-1251، ANSI وجود دارد که در سیستم عامل ویندوز استفاده می شود.

صفحات کد بزرگ:

برای رمزگذاری یک کاراکتر 16 بیت طول می کشد

به طور طبیعی، با چنین سیستم کدگذاری، مشکلی برای عدم امکان رمزگذاری یک کاراکتر خاص وجود ندارد، زیرا 65535 بیشتر از انواع کاراکترهای استفاده شده را پوشش می دهد، اما یونیکد یک اشکال دیگر دارد: هنگام ترجمه متون از ASCII به یونیکد، اندازه رایانه است. متن به طور قابل توجهی افزایش می یابد. در این راستا، کلاس دیگری از سیستم های کدگذاری با استفاده از توسعه داده شده است عدد متغیربیت برای رمزگذاری کاراکترها

اگر مهم ترین بیت کد صفر است(bit8 = 0)، سپس سیستم رمزگذاری همان ASCII است، با هر یک از 128 کاراکتر اول در یک بایت کدگذاری می شود.
اگر ارشد برابر با یک است(bit8 = 1، bit7 = 0)، سپس 16384 کاراکتر بعدی مشابه یونیکد کدگذاری می شوند، یعنی دو بایت برای رمزگذاری هر کاراکتر استفاده می شود. کاراکترهای باقی مانده (65535-128-16384 = 49023) در سه بایت کدگذاری می شوند.

مثال: در نظر بگیرید که یک رشته کاراکتر چقدر اطلاعات را حمل می کند "اطلاعات × - × اطلاعات"
در سیستم های کدگذاری مختلف در مورد CP1251، هر کاراکتر با یک بایت Þ مقدار اطلاعات کدگذاری می شود: 24 * 1 = 24 بایت. در یونیکد، هر کاراکتر با دو بایت Þ مقدار اطلاعات کدگذاری می شود: 24 * 2 = 48 بایت. در UTF-8 رمزگذاری حروف لاتین، فاصله و خط تیره به یک بایت برای هر کاراکتر نیاز دارد و هر کاراکتر کلمه "اطلاعات" با دو بایت کدگذاری می شود Þ مقدار اطلاعات: 14 * 1 + 10 * 2 = 34. بایت ها


از یک طرف، متن کامپیوتر حروف الفبا است، که بر اساس آن متن به صورت رشته ای از کاراکترها نمایش داده می شود. رویکرد الفبایی). رویکرد دیگر این است که متن رایانه از قبل به عنوان یک ساختار پیچیده در نظر گرفته می شود که از بسیاری از رشته های کاراکتر تشکیل شده است.

t: (1، 2، 3 ... k) یکی از این زنجیره های به طول k است.

این رویکرد درک الگوریتم تبدیل متن را ممکن می‌سازد، که طبق اصل نمایش عملکردی انجام می‌شود، یعنی یک زنجیره متن موجود در ناحیه تعریف این الگوریتم با زنجیره دیگری مرتبط است که نتیجه آن است. تغییر شکل: t 1 ®t 2. در این حالت دامنه تعریف تابع (الگوریتم) زبان خواهد بود.

گرامر زباناینها قوانینی هستند که تمام زنجیره های زبان را ایجاد می کنند. نماد جداگانهالفبا یک عبارت منظم است. گرامرهای عبارت منظم به صورت برنامه ای نوشته می شوند که رشته ای از کاراکترها را تولید می کند. وقت ملاقات عبارات با قاعده- مجموعه رشته هایی که زبان را تشکیل می دهند را تنظیم کنید.

نمادهای همپوشانی

کاراکتر BS (backspace) به چاپگر اجازه می دهد تا یک کاراکتر را بازنویسی کند. در ASCII، برای اضافه کردن نشانه‌ها به حروف به این روش پیش بینی شده بود، به عنوان مثال:

  • a BS "→ á
  • یک BS `→ à
  • یک BS ^ → â
  • o BS / → ø
  • c BS، → ç
  • n BS ~ → ñ

توجه داشته باشید: در فونت‌های قدیمی، آپاستروف "با یک مایل به سمت چپ کشیده می‌شد و تایلد ~ به سمت بالا جابه‌جا می‌شد، به طوری که فقط نقش حاد و تار را در بالا قرار می‌دادند.

اگر همان نماد بر روی یک نماد قرار داده شود، اثر حاصل می شود پررنگو اگر یک زیر خط روی یک کاراکتر قرار گیرد، متن زیر خط کشیده شده به دست می آید.

  • یک BS a → آ
  • یک BS _ → آ

توجه داشته باشید: برای مثال در این مورد استفاده می شود سیستم کمکیمرد.

انواع ملی ASCII

استاندارد ISO 646 (ECMA-6) امکان قرار دادن کاراکترهای ملی را در جای خود فراهم می کند @ [ \ ] ^ ` { | } ~ ... علاوه بر این، در محل # می توان جای داد £ ، و در جای خود $ - ¤ ... این سیستم برای زبان های اروپایی که تنها به چند کاراکتر اضافی نیاز دارند، مناسب است. نسخه ASCII بدون کاراکترهای ملی US-ASCII یا "نسخه مرجع بین المللی" نامیده می شود.

متعاقباً، استفاده از رمزگذاری های 8 بیتی (صفحات کد) راحت تر است، جایی که نیمه پایین جدول کد (0-127) توسط نویسه های US-ASCII اشغال شده است و قسمت بالایی (128-255) - شخصیت های اضافیاز جمله مجموعه ای از نمادهای ملی. بنابراین، نیمه بالایی جدول ASCII، قبل از پذیرش گسترده یونیکد، به طور فعال برای نشان دادن کاراکترهای محلی، حروف زبان محلی استفاده می شد. غیبت استاندارد یکنواختقرار دادن کاراکترهای سیریلیک در جدول ASCII باعث ایجاد مشکلات زیادی در رمزگذاری (KOI-8، Windows-1251 و دیگران) شد. زبان های دیگر با خط غیر لاتین نیز از وجود چندین رمزگذاری مختلف رنج می برند.

.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .C .D .E .F
0. NUL SOM EOA EOM EQT WRU RU BELL BKSP Ht LF VT FF CR بنابراین SI
1. DC 0 DC 1 DC 2 DC 3 DC 4 ERR همگام سازی LEM S 0 S 1 S 2 S 3 S 4 S 5 S 6 S 7
2.
3.
4. جای خالی ! " # $ % & " ( ) * + , - . /
5. 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
6.
7.
8.
9.
آ. @ آ ب سی دی E اف جی اچ من جی ک L م ن O
ب. پ س آر اس تی U V دبلیو ایکس Y ز [ \ ]
سی.
دی
E. آ ب ج د ه f g ساعت من j ک ل متر n o
اف. پ q r س تی تو v w ایکس y z خروج DEL

در رایانه هایی که حداقل واحد آدرس پذیر حافظه یک کلمه 36 بیتی بود، ابتدا از کاراکترهای 6 بیتی استفاده می شد (1 کلمه = 6 کاراکتر). پس از انتقال به ASCII در چنین رایانه هایی، آنها شروع به قرار دادن 5 کاراکتر هفت بیتی در یک کلمه کردند (1 بیت اضافی باقی ماند)، یا 4 کاراکتر نه بیتی.

همچنین از کدهای اسکی برای شناسایی کلید فشرده شده در حین برنامه نویسی استفاده می شود. برای یک صفحه کلید استاندارد QWERTY، جدول کد به صورت زیر است:

[کدهای 8 بیتی: ASCII، KOI-8R و CP1251] اولین جداول مجموعه حروف ایجاد شده در ایالات متحده از بیت هشتم در یک بایت استفاده نمی کردند. متن به صورت دنباله ای از بایت ها ارائه شد، اما بیت هشتم در نظر گرفته نشد (برای اهداف خدماتی استفاده شد).

استاندارد عمومی پذیرفته شده به جدول تبدیل شده است ASCII (استاندارد آمریکاکد برای تبادل اطلاعات). 32 کاراکتر ASCII اول (00 تا 1F) برای کاراکترهای غیر قابل چاپ استفاده شد. آنها برای کنترل دستگاه چاپ و موارد مشابه طراحی شده بودند. بقیه - از 20 تا 7F - کاراکترهای معمولی (قابل چاپ) هستند.

جدول 1 - رمزگذاری ASCII

دسامبرهگزاکتبرCharشرح
0 0 000 خالی
1 1 001 شروع سرفصل
2 2 002 شروع متن
3 3 003 انتهای متن
4 4 004 پایان انتقال
5 5 005 استعلام
6 6 006 اذعان
7 7 007 زنگ
8 8 010 بک اسپیس
9 9 011 زبانه افقی
10 آ 012 خط جدید
11 ب 013 زبانه عمودی
12 سی 014 صفحه جدید
13 دی 015 برگشت محموله
14 E 016 جابجا کردن
15 اف 017 جابجایی در
16 10 020 فرار لینک داده
17 11 021 کنترل دستگاه 1
18 12 022 کنترل دستگاه 2
19 13 023 کنترل دستگاه 3
20 14 024 کنترل دستگاه 4
21 15 025 تصدیق منفی
22 16 026 بیکار همزمان
23 17 027 پایان ترانس مسدود کردن
24 18 030 لغو
25 19 031 پایان متوسط
26 1A 032 جایگزین
27 1B 033 در رفتن
28 1C 034 جداکننده فایل
29 1D 035 جداکننده گروه
30 1E 036 جداکننده رکورد
31 1F 037 جداکننده واحد
32 20 040 فضا
33 21 041 !
34 22 042 "
35 23 043 #
36 24 044 $
37 25 045 %
38 26 046 &
39 27 047 "
40 28 050 (
41 29 051 )
42 2A 052 *
43 2B 053 +
44 2C 054 ,
45 2 بعدی 055 -
46 2E 056 .
47 2F 057 /
48 30 060 0
49 31 061 1
50 32 062 2
51 33 063 3
52 34 064 4
53 35 065 5
54 36 066 6
55 37 067 7
56 38 070 8
57 39 071 9
58 3A 072 :
59 3B 073 ;
60 3C 074 <
61 سه بعدی 075 =
62 3E 076 >
63 3F 077 ?
دسامبرهگزاکتبرChar
64 40 100 @
65 41 101 آ
66 42 102 ب
67 43 103 سی
68 44 104 دی
69 45 105 E
70 46 106 اف
71 47 107 جی
72 48 110 اچ
73 49 111 من
74 4A 112 جی
75 4B 113 ک
76 4C 114 L
77 4 بعدی 115 م
78 4E 116 ن
79 4F 117 O
80 50 120 پ
81 51 121 س
82 52 122 آر
83 53 123 اس
84 54 124 تی
85 55 125 U
86 56 126 V
87 57 127 دبلیو
88 58 130 ایکس
89 59 131 Y
90 5A 132 ز
91 5B 133 [
92 5C 134 \
93 5 بعدی 135 ]
94 5E 136 ^
95 5F 137 _
96 60 140 `
97 61 141 آ
98 62 142 ب
99 63 143 ج
100 64 144 د
101 65 145 ه
102 66 146 f
103 67 147 g
104 68 150 ساعت
105 69 151 من
106 6A 152 j
107 6B 153 ک
108 6C 154 ل
109 6 بعدی 155 متر
110 6E 156 n
111 6F 157 o
112 70 160 پ
113 71 161 q
114 72 162 r
115 73 163 س
116 74 164 تی
117 75 165 تو
118 76 166 v
119 77 167 w
120 78 170 ایکس
121 79 171 y
122 7A 172 z
123 7B 173 {
124 7C 174 |
125 7D 175 }
126 7E 176 ~
127 7F 177 DEL

همانطور که به راحتی می توانید ببینید، این رمزگذاری فقط شامل حروف لاتین و آنهایی است که در زبان انگلیسی استفاده می شود. نمادهای حسابی و دیگر خدمات نیز وجود دارد. اما هیچ حروف روسی یا حتی حروف لاتین خاص برای آلمانی یا فرانسوی وجود ندارد. توضیح این امر آسان است - رمزگذاری به طور خاص به عنوان یک استاندارد آمریکایی توسعه داده شده است. هنگامی که کامپیوترها در سراسر جهان شروع به استفاده کردند، رمزگذاری نمادهای دیگر ضروری شد.

برای این کار تصمیم گرفته شد که در هر بایت از بیت هشتم استفاده شود. بنابراین، 128 مقدار بیشتر (از 80 تا FF) در دسترس بود که می‌توان از آنها برای رمزگذاری کاراکترها استفاده کرد. اولین جدول از جدول های هشت بیتی "ASCII توسعه یافته" است ( ASCII توسعه یافته) - شامل گزینه های مختلف است حروف لاتیندر برخی از زبان های اروپای غربی استفاده می شود. همچنین حاوی نمادهای اضافی دیگری از جمله شبه گرافیک بود.

کاراکترهای شبه گرافیکی فقط با نمایش دادن اجازه می دهند کاراکترهای متنی، ظاهری از گرافیک ارائه می دهد. با کمک شبه گرافیک، مثلاً برنامه ای برای کنترل فایل های FARمدیر.

هیچ حرف روسی در جدول Extended ASCII وجود نداشت. در روسیه (سابق اتحاد جماهیر شوروی سابق) و در سایر ایالت ها، رمزگذاری های خاص آنها ایجاد شد که امکان نمایش شخصیت های "ملی" خاص را در فایل های متنی 8 بیتی - حروف لاتین زبان های لهستانی و چکی، سیریلیک (از جمله حروف روسی) فراهم کرد. ) و الفبای دیگر.

در تمام رمزگذاری هایی که گسترده شده اند، 127 کاراکتر اول (یعنی مقادیر بایت با بیت هشتم برابر با 0) با ASCII منطبق است. بنابراین، یک فایل ASCII در هر یک از این کدگذاری ها کار می کند. نامه ها به انگلیسیآنها به همین ترتیب نشان داده می شوند.

سازمان ISO(سازمان بین المللی استاندارد) مجموعه ای از استانداردها را پذیرفت ISO 8859... رمزگذاری های 8 بیتی را برای آن تعریف می کند گروه های مختلفزبان ها. بنابراین، ISO 8859-1 Extended ASCII است، جدولی برای ایالات متحده و اروپای غربی. و ISO 8859-5 جدولی برای سیریلیک (از جمله روسی) است.

با این حال، به دلایل تاریخی، کدگذاری ISO 8859-5 مورد توجه قرار نگرفته است. در واقع، رمزگذاری های زیر برای زبان روسی استفاده می شود:

کد صفحه 866 ( CP866، با نام مستعار "DOS"، با نام مستعار "رمزگذاری GOST جایگزین". تا اواسط دهه 90 به طور گسترده مورد استفاده قرار گرفت. اکنون به میزان محدودی استفاده می شود. عملاً برای توزیع متون در اینترنت استفاده نمی شود.
- KOI-8. در دهه 70 و 80 توسعه یافت. این یک استاندارد عمومی پذیرفته شده برای انتقال پیام های پستی در اینترنت روسیه است. همچنین به طور گسترده ای در سیستم های عاملخانواده های یونیکس، از جمله لینوکس. نسخه KOI-8، طراحی شده برای زبان روسی، نامیده می شود KOI-8R; نسخه هایی برای سایر زبان های سیریلیک وجود دارد (به عنوان مثال، KOI8-U گزینه ای برای زبان اوکراینی است).
- کد صفحه 1251، CP1251، Windows-1251. توسعه یافته توسط توسط مایکروسافتبرای پشتیبانی از زبان روسی در ویندوز.

مزیت اصلی CP866 حفظ کاراکترهای شبه گرافیکی در همان مکان‌هایی بود که در Extended ASCII وجود داشت. بنابراین، خارجی برنامه های متنیبه عنوان مثال فرمانده معروف نورتون. امروزه CP866 برای برنامه های ویندوزی که در پنجره های متنی یا حالت متنی تمام صفحه اجرا می شوند، از جمله FAR Manager استفاده می شود.

متن آهنگ CP866 سال های گذشتهبسیار نادر هستند (اما برای رمزگذاری نام فایل های روسی در ویندوز استفاده می شود). بنابراین، ما با جزئیات بیشتری در مورد دو رمزگذاری دیگر - KOI-8R و CP1251 صحبت خواهیم کرد.



همانطور که می بینید، در جدول رمزگذاری CP1251، حروف روسی به ترتیب حروف الفبا مرتب شده اند (به جز حرف E). با تشکر از این مکان برنامه های کامپیوتریمرتب کردن بر اساس حروف الفبا بسیار آسان است.

اما در KOI-8R ترتیب حروف روسی تصادفی به نظر می رسد. اما در واقع اینطور نیست.

بسیاری از برنامه های قدیمی بیت هشتم را هنگام پردازش یا انتقال متن از دست دادند. (اکنون چنین برنامه هایی عملا "مرده" شده اند، اما در اواخر دهه 80 - اوایل دهه 90 آنها گسترده بودند). برای به دست آوردن یک مقدار 7 بیتی از یک مقدار 8 بیتی، 8 را از مهم ترین رقم کم کنید. به عنوان مثال E1 می شود 61.

اکنون KOI-8R را با آن مقایسه کنید جدول ASCII(میز 1). متوجه خواهید شد که حروف روسی به وضوح با حروف لاتین همسو هستند. اگر بیت هشتم ناپدید شود، حروف کوچک روسی به حروف لاتین بزرگ و حروف بزرگ روسی به حروف کوچک لاتین تبدیل می شوند. بنابراین، E1 در KOI-8 روسی "A" است، در حالی که 61 در ASCII لاتین "a" است.

بنابراین، KOI-8 به شما امکان می دهد تا خوانایی متن روسی را در حالی که بیت هشتم را از دست می دهید، حفظ کنید. "سلام به همه" به "pRIWET WSEM" تبدیل می شود.

V در این اواخرو ترتیب حروف الفباترتیب کاراکترها در جدول رمزگذاری و خوانایی با از دست دادن بیت هشتم اهمیت تعیین کننده خود را از دست داده است. بیت هشتم در کامپیوترهای مدرندر حین انتقال یا پردازش گم نمی شود. مرتب سازی به ترتیب حروف الفبا بر اساس رمزگذاری است و نه فقط با مقایسه کدها. (به هر حال، کدهای CP1251 کاملاً حروف الفبا نیستند - حرف E در جای خود نیست).

با توجه به این واقعیت که دو رمزگذاری رایج وجود دارد، هنگام کار با اینترنت (ایمیل، مرور وب سایت ها)، گاهی اوقات می توانید مجموعه ای بی معنی از حروف را به جای متن روسی مشاهده کنید. به عنوان مثال، "من SBUFEMHEL هستم". اینها فقط عبارت "با احترام" هستند. اما آنها در رمزگذاری CP1251 کدگذاری شدند و کامپیوتر متن را مطابق جدول KOI-8 رمزگشایی کرد. اگر همان کلمات، برعکس، در KOI-8 رمزگذاری شده باشند، و کامپیوتر متن را مطابق جدول CP1251 رمزگشایی کند، نتیجه "У ХЧБЦЕОЙЕН" خواهد بود.

گاهی اوقات اتفاق می افتد که رایانه حروف روسی را بر اساس جدولی که برای زبان روسی در نظر گرفته نشده است، رمزگشایی می کند. سپس، به جای حروف روسی، مجموعه ای از نمادها بی معنی ظاهر می شود (به عنوان مثال، حروف لاتین زبان های اروپای شرقی). آنها اغلب "crocozyabras" نامیده می شوند.

در بیشتر موارد برنامه های مدرنمقابله با تعیین رمزگذاری اسناد اینترنتی ( ایمیل هاو صفحات وب) خودتان. اما گاهی اوقات آنها "اشتباه" می کنند و سپس می توانید دنباله های عجیبی از حروف روسی یا "krokozyabra" را ببینید. به عنوان یک قاعده، برای نمایش متن واقعی روی صفحه، کافی است کدگذاری را به صورت دستی در منوی برنامه انتخاب کنید.

برای مقاله از اطلاعات صفحه http://open-office.edusite.ru/TextProcessor/p5aa1.html استفاده شد.

مطالب برگرفته از سایت:

رمزگذاری متن: ASCII و Unicode (UTF-16)

انسان به راحتی متن را درک می کند. مغز ما هر روز حجم عظیمی از متن را پردازش می کند. برخلاف ما، پردازنده کامپیوتر فقط با اعداد کار می کند. بنابراین، تمام داده های متنی در حافظه کامپیوتر با اعداد نمایش داده می شوند. اما قبل از بحث مفصلدر این مرحله، بیایید به یاد بیاوریم که حافظه کامپیوتر چگونه سازماندهی شده است.

حافظه کامپیوتر دنباله ای از بیت ها است. بیت کوچکترین واحد اطلاعاتی است که می تواند دو مقدار را ذخیره کند: صفر یا یک. آن ها تمام داده هایی که یک کامپیوتر می تواند تولید کند (اعداد، متن، صدا، ویدئو) دنباله ای از صفر و یک است.

بیت خیلی کوچک است. بنابراین، بیت ها به بایت ها متصل می شوند. هشت بیت در یک بایت وجود دارد. هر بایت آدرس مخصوص به خود را دارد. این بایت است که حداقل واحدی است که پردازنده می تواند به آن دسترسی داشته باشد - پردازنده فقط از طریق بایت های مربوطه نمی تواند به بیت های جداگانه دسترسی پیدا کند. بیایید نگاهی به یک قطعه کوچک از حافظه کامپیوتر بیندازیم:

01001000 01000101 01001011 01001011 01001111 00100001

آدرس های بایت در بالا و مقادیر ذخیره شده در این آدرس ها در پایین نشان داده شده اند. در واقعیت، چنین آدرس‌هایی وجود ندارند، زیرا رایانه‌های مدرن با فضاهای آدرس بزرگ کار می‌کنند. آدرس ها در کامپیوترهای مدرن به این صورت نوشته می شوند: 0x01328921. آدرس ها در قالب هگزادسیمال نوشته می شوند.

یک بایت می تواند 256 مقدار را ذخیره کند - 28 = 256. محدوده مقادیر: از صفر تا 255 (برای اعداد بدون علامت)، یا از -128 تا 127 (برای اعداد امضا شده). هگزادسیمال حداکثر مقداربایت - 0xff. به قابلیت استفاده توجه کنید سیستم هگزادسیمالمحاسبه: برای نوشتن هر مقدار تک بایتی به دو رقم نیاز است. بیایید به محدوده های یک عدد بایت در کل نگاه کنیم سه سیستممحاسبه:

00000000 ... 11111111

پردازنده همه اعداد را به صورت باینری می بیند، اما می تواند آنها را به سیستم های اعداد دیگر تبدیل کند، به طوری که خواندن آنها برای ما راحت باشد. قوانین تبدیل بین سیستم های مختلفحسابی که در درس های قبل در موردش صحبت کردیم. دنباله بایت های داده شده در بالا را می توان به صورت زیر نشان داد:

0x48 0x45 0x4b 0x4b 0x4f 0x21 // هگزادسیمال

استفاده از یک فرم باینری برای رایانه راحت تر است و برای ما - هگزادسیمال یا اعشاری.

رمزگذاری اسکی

برای نمایش متن به صورت اعداد، هر حرف اختصاص داده می شود مقدار عددی- رمزگذاری معانی حروف. اختصاص دادن به تمام حروف ارزش منحصر به فرد، کدگذاری را دریافت می کنیم (مجموعه کاراکتر، پایان دادن). اما استفاده از رمزگذاری خود فایده ای ندارد - فقط می توانید از آن در برنامه خود استفاده کنید. در این لحظهپرکاربردترین رمزگذاری ASCII است.



در ابتدا، یک کاراکتر ASCII 7 بیت بود. اما زمانی که بایت 8 بیتی منتشر شد (بله، بایت هایی وجود داشت اندازه های متفاوت، سپس ASCII به هشت بیت گسترش یافته است. رمزگذاری 7 بیتی نصف اندازه رمزگذاری هشت بیتی است: 27 = 128< 28=256.

بنابراین، در ابتدا 128 مقدار در رمزگذاری ASCII وجود داشت: از 0 تا 127 (0x00 تا 0x7f). این برای رمزگذاری تمام حروف الفبای لاتین، اعداد عربی و تعدادی کاراکتر دیگر کافی است.

رمزگذاری ASCII 7 بیتی اساس همه کدگذاری های رایج فعلی است و در برنامه نویسی بسیار مهم است. بنابراین، ما با مقادیر خاص آشنا می شویم:

0 - صفر در متن نمایش داده شده یک عدد نیست. به این کدهیچ نمادی ضمیمه نشده است آن ها شما هرگز نمایش صفر را روی صفحه نخواهید دید. با این حال، صفر در برنامه نویسی و ذخیره متن بسیار مهم است. این کد برای چه استفاده می شود، بعداً خواهیم فهمید.

32 یک فضا است.

48 - کد صفر. وقتی صفر را روی صفحه نمایشگر می بینیم، در حافظه کامپیوتر این علامت با عدد 48 نشان داده می شود.

57 - نه.

65 - نامه شکستهالف (الفبای انگلیسی).

90 - حرف بزرگ Z.

97 - حروف کوچکآ.

122 یک حرف کوچک z است.

بیایید به دنباله بایت هایی که قبلاً بحث شد برگردیم و سعی کنیم مقدار هر کدام را با یک کد اسکی مطابقت دهیم:

01001000 01000101 01001011 01001011 01001111 00100001 // فرم باینری (دودویی)

72 69 76 76 79 33 // فرم اعشاری

سلام! // کاراکترهای اسکی

اوه، معجزه! ما متن "سلام!"

کامپیوتر فقط دنباله‌ای از بایت‌ها را می‌بیند که می‌تواند با آدرس‌هایشان به آنها اشاره کند. ما می توانیم ببینیم چگونه اعداد اولو متن، اگر به این اعداد در کدگذاری اسکی نگاه کنید.

رمزگذاری ASCII توسعه یافته

با ظهور رمزگذاری هشت بیتی، الفبای دیگر نیز قادر به رمزگذاری در اسکی شدند. بسیاری از رمزگذاری های ASCII توسعه یافته وجود دارد - نسخه هایی برای بسیاری از الفبای ملی وجود دارد. علاوه بر این، نیمه اول رمزگذاری (مقادیر از صفر تا 127) در همه جا یکسان است.

الفبای روسی (سیریلیک) با نام windows-1251 کدگذاری شده است. یکی دیگر از نسخه های محبوب ASCII - windows-1252 - یک رمزگذاری برای زبان های اروپای غربی است (حروف مخصوص الفبای فرانسوی و آلمانی را رمزگذاری می کند). ضمناً متنی که اکنون می خوانید در ویندوز 1251 کدگذاری شده است.

ما اهمیتی نمی دهیم که حروف روسی (و همچنین حروف انگلیسی) در ویندوز 1251 چگونه رمزگذاری می شوند - نیازی به دانستن معانی خاصی نداریم. در صورت لزوم می توانید پیدا کنید لیست کاملمقادیر کاراکتر برای ویندوز-1251 در موتورهای جستجو.

رمزگذاری اعداد در متن

در عمل، شما نیازی به دانستن معانی رمزگذاری شده حروف ندارید. اما در عین حال، یادآوری مقادیر رمزگذاری شده اعداد ضروری است. در اسکی، اعداد دارای کدهایی از 48 تا 57.48 صفر است، 49 یک ... 57 است نه. اجازه دهید یادآوری کنم که 128 مقدار اول در همه رمزگذاری ها یکسان است، بنابراین کدهای اعداد در همه جا یکسان هستند. و این، من به شما می گویم، بسیار جالب است. چرا باید کدهای اعداد را بدانید و این چه ارتباطی با ایجاد بازی دارد؟

فرض کنید در بازی خود باید مقادیر واحدهای کاربر را نمایش دهیم. در داخل، این یک عدد اول است که با یک متغیر نشان داده می شود. اما برای اینکه کاربر این عدد را ببیند باید به متن تبدیل شود که روی صفحه نمایش داده می شود. بنابراین، هنگام ایجاد یک بازی، نوشتن کدی که اعداد را به متن تبدیل می کند، ضروری است.

به عنوان مثال، دو مقدار را در نظر بگیرید: در ابتدای بازی، کاربر هیچ واحدی ندارد و پس از مدتی پنج واحد ساخته است.

ابتدا کاربر باید کاراکتر 0 را نمایش دهد. برای این کار باید از مقدار رمزگذاری شده این کاراکتر - 48 استفاده کنید. سپس کاربر باید کاراکتر 5 را نمایش دهد که کد آن 53 است. در اینجا می توانید مشاهده کنید. ویژگی جالب: کد کاراکتری رقم با مقدار واقعی آن 48 متفاوت است. بنابراین برای اعداد تک رقمی (و فقط تک رقمی) می توانیم از کد زیر استفاده کنیم:

int var = GetUnitNumber (); // تعداد واحدها را بیابید

خروجی کاراکتر = var + 48;

اکنون می توانید خروجی متغیر را روی صفحه نمایش دهید. تنها یک مشکل باقی مانده است که باید حل شود: در شرایط واقعی، اعداد تک رقمی بسیار به ندرت استفاده می شوند. به عنوان مثال، در Company of heroes، یک بازیکن بیش از 15 واحد تحت فرمان خود دارد، در Age of Empires - بیش از 50. در بازی های دیگر نیز وضعیت به همین صورت است. در شوترها، ممکن است لازم باشد تعداد کارتریج و سلامت (که مقادیر آنها تقریباً همیشه بیشتر از 9 است) نمایش داده شود. البته، هنگام ساخت بازی خود، باید اعداد چند رقمی را نمایش دهیم. خروجی اعداد چند رقمی را در درس بعدی در نظر می گیریم، اما اکنون به بررسی رمزگذاری ها برمی گردیم.

رمزگذاری یونیکد - یونیکد

یک بایت فقط می تواند 256 مقدار داشته باشد. این بدان معنی است که 256 کاراکتر را می توان در ASCII رمزگذاری کرد: اعداد، حروف، نمادها، علائم نقطه گذاری و سایر نمادهای مختلف. در همان زمان، اسکریپت هایی وجود دارد که در آنها کاراکترهای بسیار بیشتری وجود دارد، به عنوان مثال، حروف چینی یا ژاپنی.

برای حل این مشکل (و برخی دیگر)، رمزگذاری یونیکد در اوایل دهه نود ایجاد شد. در اصل، همه کاراکترهای یونیکد دو بایت بودند. بر این اساس، 216 = 65536 مقادیر را می توان در یونیکد کدگذاری کرد. سپس فضای کد به بیش از یک میلیون کاراکتر افزایش یافت. این منجر به چندین نمایش یونیکد شد.

محبوب ترین نمایش های یونیکد دو هستند: UTF-8 - مورد استفاده در اینترنت و UTF-16 - مورد استفاده در ویندوز (ویندوز XP، ویندوز ویستا، ویندوز 7).

در زمینه ایجاد بازی ها، مهم نیست که چگونه همه شخصیت ها در نمایش های مختلف یونیکد کدگذاری شده اند. اما نکته مهم این است که در همه نمایش ها، اعداد عربی به همان شکلی که در ASCII رمزگذاری می شوند.

دو نسخه از UTF-16 وجود دارد: UTF-16LE (کوچک endian) - رمزگذاری با به صورت برعکسبایت و UTF-16BE (big-endian) - رمزگذاری اندیان بزرگ. البته در ویندوز از UTF16-LE استفاده می شود.

کد کاراکتر یونیکد به صورت زیر تعیین می شود: U + hhhh (چهار رقم هگزا دسیمال، h از هگزا دسیمال). به عنوان مثال، U + 221A نماد است ریشه دوم - √.

برخی از کاراکترهای UTF-16 در دو بایت (63 هزار اول) کدگذاری می شوند. بقیه شخصیت ها با جفت های جایگزین رمزگذاری شده اند. از آنجایی که این برای ایجاد بازی ها خیلی مهم نیست، من در مورد جفت های جانشین با جزئیات صحبت نمی کنم.

در UTF-8، 128 کاراکتر اول در یک بایت کدگذاری می شوند. بقیه کاراکترها را می توان با چندین بایت (از دو تا چهار) کدگذاری کرد.

و یک نکته دیگر (مهمترین): همه نمادهای تمام اسکریپت های مدرن و بسیاری از اسکریپت های مرده در یونیکد کدگذاری شده اند، به علاوه علائمی از مناطق مختلفعلم و فرهنگ (نمادهای ریاضی و اقتصادی، نت موسیقی و خیلی چیزهای دیگر). به همین دلیل است که باید از یونیکد استفاده کنید.

یک بار دیگر تکرار می کنم که آگاهی از استاندارد یونیکد و ویژگی های بازنمودهای مختلف آن کمک چندانی به موضوعی مانند ساخت بازی نمی کند، بنابراین شما مجبور خواهید بود که آشنایی بیشتر خود را با یونیکد به تنهایی ادامه دهید. طبق معمول، استاندارد کمک ارزشمندی در این زمینه ارائه خواهد کرد.

رمزگذاری متن در ویندوز مایکروسافت(ویندوز XP، ویندوز ویستا، ویندوز 7)

در مدرن نسخه های ویندوزدو راه برای نمایش متن وجود دارد: UTF-16 و صفحات کد (عمدتا رمزگذاری های هشت بیتی). راه اصلی یونیکد است. صفحات کد برای سازگاری با برنامه های قدیمی مورد نیاز هستند (در ویندوز 95، ویندوز 98 - ASCII عمدتا استفاده می شد). همچنین یونیکد یکی را خیلی نمی فهمد برنامه مهم- کنسول.

گیج نشوید ترم جدید- صفحه کد در ویندوز، همه رمزگذاری ها (مجموعه کاراکترها یا رمزگذاری ها) به این نام خوانده می شوند. آن ها مفهوم رمزگذاری معادل یک صفحه کد است.

فوراً تذکری خواهم داد که بهتر است به خاطر بسپارم. ویندوز دارد جدایی واضح: اینجا یونیکد (UTF-16LE) و در اینجا همه رمزگذاری های دیگر است. هم یونیکد و هم سایر رمزگذاری‌ها در ویندوز، صفحه کد نامیده می‌شوند، اما من این اصطلاح (صفحه‌های کد) را برای همه کدگذاری‌ها به جز یونیکد اعمال می‌کنم.

وقتی نوشتیم برنامه های کنسول، متن با استفاده از صفحه کد windows-1252 خروجی شد. به همین دلیل مجبور شدیم setlocale را فراخوانی کنیم (صفحه کد را به ویندوز-1251 تغییر می دهد):

این تابع مکان را تغییر می دهد.

محل - محل

ویندوز چیزی به نام Locale دارد. در اینجا من به درستی از مقاله ردیابی این کلمه - محلی استفاده نمی کنم، اما به نظر من، برای گنجاندن کل معنای مفهوم Locale کاملاً ظرفیت دارد. محلی به ویژگی های محلی ترجمه می شود. آن ها اینها برخی از پارامترهای مورد استفاده در این مکان خاص (منطقه، کشور) هستند. setlocale این ویژگی ها را تغییر می دهد:

setlocale (LC_CTYPE، "روسی")؛

در این چالش، لوکیشن به روسی تغییر می کند. بنابراین، ویندوز می تواند از مشخصات محلی ما استفاده کند: نمایش تاریخ و زمان، سیستم اندازه گیری، واحد پول و البته صفحه کد.

اولین پارامتر این تابع نشان می دهد که کدام دسته ها ویژگی های محلیمی تواند تغییر کند. فقط می‌توانید صفحه کد (LC_CTYPE) را تغییر دهید، می‌توانید قالب تاریخ و زمان را تغییر دهید (LC_TIME)، یا می‌توانید همه دسته‌ها را تغییر دهید (LC_ALL، همه - همه).

بازگشت به رمزگذاری

تنها یک صفحه کد را می توان در یک زمان استفاده کرد، در حالی که یونیکد همچنین می تواند با کاراکترهای صفحه کد در برنامه استفاده شود، زیرا یونیکد از همه صفحات کد دیگر جدا است. سعی کنید همیشه از یونیکد در برنامه های خود استفاده کنید. تنها استفاده از صفحات کد در کنسول منطقی است.

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