Разное

Кодировка символов в windows: Кодировки — Win32 apps | Microsoft Learn

Кодирование символов : кодовая страница, ASCII

 

Кодировка символов (часто называемая также кодовой страницей) – это набор числовых значений, которые ставятся в соответствие группе алфавитно-цифровых символов, знаков пунктуации и специальных символов.

Для кодировки символов в Windows используется таблица ASCII (American Standard Code for Interchange of Information).

В ASCII первые 128 символов всех кодовых страниц состоят из базовой таблицы символов. Первые 32 кода базовой таблицы, начиная с нулевого, размещают управляющие коды.

СимволКодКлавишиЗначение
nul0Ctrl + @Нуль
soh1Ctrl + AНачало заголовка
stx2Ctrl + BНачало текста
etx3Ctrl + CКонец текста
eot4Ctrl + D
Конец передачи
enq5Ctrl + EЗапрос
ack6Ctrl + FПодтверждение
bel7Ctrl + GСигнал (звонок)
bs8Ctrl + HЗабой (шаг назад)
ht9Ctrl + IГоризонтальная табуляция
lf10Ctrl + JПеревод строки
vt11Ctrl + KВертикальная табуляция
ff12Ctrl + LНовая страница
cr13Ctrl + MВозврат каретки
so14Ctrl + NВыключить сдвиг
si15Ctrl + OВключить сдвиг
dle16Ctrl + PКлюч связи данных
dc117Ctrl + QУправление устройством 1
dc218Ctrl + RУправление устройством 2
dc319Ctrl + SУправление устройством 3
dc420Ctrl + TУправление устройством 4
nak21Ctrl + UОтрицательное подтверждение
syn22Ctrl + VСинхронизация
etb23Ctrl + WКонец передаваемого блока
can24Ctrl + XОтказ
em25Ctrl + YКонец среды
sub26Ctrl + ZЗамена
esc27Ctrl + [Ключ
fs28Ctrl + \Разделитель файлов
gs29Ctrl + ]Разделитель группы
rs30
Ctrl + ^
Разделитель записей
us31Ctrl + _Разделитель модулей

Базовая таблица кодировки ASCII

32 пробел48 064 @80 P96 `112 p
33 !49 165 A81 Q97 a113 q
34 50 266 B82 R98 b114 r
35 #51 367 C83 S99 c115 s
36 $52 468 D84 T100 d116 t
37 %53 569 E85 U101 e117 u
38 &54 670 F86 V102 f118 v
39 ‘55 771 G87 W103 g119 w
40 (56 872 H88 X104 h120 x
41 )57 973 I89 Y105 i121 y
42 *58 :74 J90 Z106 j122 z
43 +59 ;75 K91 [107 k123 {
44 ,60 <76 L92 \108 l124 |
45 —61 =77 M93 ]109 m125 }
46 .110 n126 ~
47 /63 ?79 O95 _111 o127

Символы с номерами от 128 до 255 представляют собой таблицу расширения и варьируются в зависимости от набора скриптов, представленных кодировкой символов. Набор символов таблицы расширения различается в зависимости от выбранной кодовой страницы:

1251 – кодовая страница Windows

128 Ђ144 Ђ160176 °192 А208 Р224 а240 р
129 Ѓ145 ‘161 Ў177 ±193 Б209 С225 б241 с
130 ‚146 ’162 ў178 I194 В210 Т226 в242 т
131 ѓ147 “163 J179 i195 Г211 У227 г243 у
132 „148 ”164 ¤180 ґ196 Д212 Ф228 д244 ф
133 …149 •165 Ґ181 μ197 Е213 Х229 е245 х
134 †150 –166 ¦182 ¶198 Ж214 Ц230 ж246 ц
135 ‡151 —167 §183 ·199 З215 Ч231 з247 ч
136 €152 □168 Ё184 ё200 И216 Ш232 и248 ш
137 ‰153 ™169 ©185 №201 Й217 Щ233 й249 щ
138 Љ154 љ170 Є186 є202 К218 Ъ234 к250 ъ
139 <155 >171 «187 »203 Л219 Ы235 л251 ы
140 Њ156 њ172 ¬188 j204 М220 Ь236 м252 ь
141 Ќ157 ќ173189 S205 Н221 Э237 н253 э
142 Ћ158 ћ174 ®190 s206 О222 Ю238 о254 ю
143 Џ159 џ175 Ï191 ї
207 П
223 Я239 п255 я

866 – кодовая страница DOS

128 А144 Р160 а176 ░192 └208 ╨224 р240 ≡Ё
129 Б145 С161 б177 ▒193 ┴209 ╤225 с241 ±ё
130 В146 Т162 в178 ▓194 ┬210 ╥226 т242 ≥
131 Г147 У163 г179 │195 ├211 ╙227 у243 ≤
132 Д148 Ф164 д180 ┤196 ─212 ╘228 ф244 ⌠
133 Е149 Х165 е181 ╡197 ┼213 ╒229 х245 ⌡
134 Ж150 Ц166 ж182 ╢198 ╞214 ╓230 ц246 ¸
135 З151 Ч167 з183 ╖199 ╟215 ╫231 ч247 »
136 И152 Ш168 и184 ╕200 ╚216 ╪232 ш248 °
137 Й153 Щ169 й185 ╣201 ╔217 ┘233 щ249 ·
138 К154 Ъ170 к186 ║202 ╩218 ┌234 ъ250 ∙
139 Л155 Ы171 л187 ╗203 ╦219 █235 ы251 √
140 М156 Ь172 м188 ╝204 ╠220 ▄236 ь252 ⁿ
141 Н157 Э173 н189 ╜205 ═221 ▌237 э253 ²
142 О158 Ю174 о190 ╛206 ╬222 ▐ 238 ю254 ■
143 П159 Я175 п191 ┐207 ╧223 ▀239 я255

Русские названия основных спецсимволов:

СимволНазвание
`гравис, кавычка, обратный машинописный апостроф
`гравис, кавычка, обратный машинописный апостроф
~тильда
!восклицательный знак
@эт, коммерческое эт, «собака»
#октоторп, решетка, диез
$знак доллара
%процент
^циркумфлекс, знак вставки
&амперсанд
*астериск, звездочка, знак умножения
(левая открывающая круглая скобка
)правая закрывающая круглая скобка
минус, дефис
_знак подчеркивания
=знак равенства
+плюс
[левая открывающая квадратная скобка
]правая закрывающая квадратная скобка
{левая открывающая фигурная скобка
}правая закрывающая фигурная скобка
;точка с запятой
:двоеточие
машинописный апостроф, одинарная кавычка
«двойная кавычка
,запятая
.точка
/слэш, косая черта, знак дроби
<левая открытая угловая скобка, знак меньше
>правая закрытая угловая скобка, знак больше
\обратный слэш, обратная косая черта
|вертикальная черта

Кодировка UNICODE

Юникод (Unicode) — стандарт кодирования символов, позволяющий представить знаки практически всех письменных языков. Стандарт предложен в 1991 году некоммерческой организацией «Консорциум Юникода».

В Unicode используются 16-битовые (2-байтовые) коды, что позволяет представить 65536 символов.

Применение стандарта Unicode позволяет закодировать очень большое число символов из разных письменностей: в документах Unicode могут соседствовать китайские иероглифы, математические символы, буквы греческого алфавита, латиницы и кириллицы, при этом становится ненужным переключение кодовых страниц.

Для представления символьных данных в кодировке Unicode используется символьный тип wchar_t.

ASCIIUNICODE
charwchar_t
1 байт2 байта

Тип кодировки задается в свойствах проекта Microsoft Visual Studio:


Многобайтовая кодировка предполагает использование кодировки ASCII.
При этом при построении проекта используется директива условной компиляции, переопределяющая тип TCHAR:

 
 
 
 
 

#ifdef _UNICODE
  typedef wchar_t TCHAR;
#else
  typedef char TCHAR;
#endif

Для перекодирования строки в формат Unicode без изменения кодировки файла используется макроопределение
_T(«строка»)

Прототип макроса содержится в файле tchar.h.

Назад: Представление данных и архитектура ЭВМ

Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юникод (UTF 8, 16, 32) — как исправить проблему с кракозябрами

Сегодня мы поговорим о том, откуда берутся кракозябры на сайте и в программах, какие кодировки текста существуют и какие из них следует использовать. Подробно рассмотрим историю их развития, начиная с базовой ASCII, а также ее расширенных версий CP866, KOI8-R, Windows 1251 и заканчивая современными кодировками консорциума Юникод UTF 16 и 8. Оглавление:

  • ASCII — базовая кодировка текста для латиницы
  • Расширенные версии Аски — кодировки CP866 и KOI8-R
  • Windows 1251 — вариация ASCII и почему вылезают кракозябры
  • Юникод (Unicode) — универсальные кодировки UTF 8, 16 и 32
  • Кракозябры вместо русских букв — как исправить

Кому-то эти сведения могут показаться излишними, но знали бы вы, сколько мне приходит вопросов именно касаемо вылезших кракозябров (нечитаемого набора символов). Теперь у меня будет возможность отсылать всех к тексту этой статьи и самостоятельно отыскивать свои косяки. Ну что же, приготовьтесь впитывать информацию и постарайтесь следить за ходом повествования.

ASCII — базовая кодировка текста для латиницы

Развитие кодировок текстов происходило одновременно с формированием отрасли IT, и они за это время успели претерпеть достаточно много изменений. Исторически все начиналось с довольно-таки неблагозвучной в русском произношении EBCDIC, которая позволяла кодировать буквы латинского алфавита, арабские цифры и знаки пунктуации с управляющими символами. Но все же отправной точкой для развития современных кодировок текстов стоит считать знаменитую ASCII (American Standard Code for Information Interchange, которая по-русски обычно произносится как «аски»). Она описывает первые 128 символов из наиболее часто используемых англоязычными пользователями — латинские буквы, арабские цифры и знаки препинания. Еще в эти 128 знаков, описанных в ASCII, попадали некоторые служебные символы вроде скобок, решеток, звездочек и т.п. Собственно, вы сами можете увидеть их: Именно эти 128 символов из первоначального варианта ASCII стали стандартом, и в любой другой кодировке вы их обязательно встретите и стоять они будут именно в таком порядке. Но дело в том, что с помощью одного байта информации можно закодировать не 128, а целых 256 различных значений (двойка в степени восемь равняется 256), поэтому вслед за базовой версией Аски появился целый ряд расширенных кодировок ASCII, в которых можно было кроме 128 основных знаков закодировать еще и символы национальной кодировки (например, русской). Тут, наверное, стоит еще немного сказать о системах счисления, которые используются при описании. Во-первых, как вы все знаете, компьютер работает только с числами в двоичной системе, а именно с нулями и единицами («булева алгебра», если кто проходил в институте или в школе). Один байт состоит из восьми бит, каждый из которых представляет собой двойку в степени, начиная с нулевой, и до двойки в седьмой: Не трудно понять, что всех возможных комбинаций нулей и единиц в такой конструкции может быть только 256. Переводить число из двоичной системы в десятичную довольно просто. Нужно просто сложить все степени двойки, над которыми стоят единички. В нашем примере это получается 1 (2 в степени ноль) плюс 8 (два в степени 3), плюс 32 (двойка в пятой степени), плюс 64 (в шестой), плюс 128 (в седьмой). Итого получается 233 в десятичной системе счисления. Как видите, все очень просто. Но если вы присмотритесь к таблице с символами ASCII, то увидите, что они представлены в шестнадцатеричной кодировке.

Например, «звездочка» соответствует в Аски шестнадцатеричному числу 2A. Наверное, вам известно, что в шестнадцатеричной системе счисления используются кроме арабских цифр еще и латинские буквы от A (означает десять) до F (означает пятнадцать). Ну так вот, для перевода двоичного числа в шестнадцатеричное прибегают к следующему простому способу. Каждый байт информации разбивают на две части по четыре бита. Т.е. в каждой половинке байта двоичным кодом можно закодировать только шестнадцать значений (два в четвертой степени), что можно легко представить шестнадцатеричным числом. Причем в левой половине байта считать степени нужно будет опять начиная с нулевой, а не так, как показано на скриншоте. В результате мы получим, что на скриншоте закодировано число E9. Надеюсь, что ход моих рассуждений и разгадка данного ребуса вам оказались понятны. Ну, а теперь продолжим, собственно, говорить про кодировки текста.

Расширенные версии Аски — кодировки CP866 и KOI8-R с псевдографикой

Итак, мы с вами начали говорить про ASCII, которая являлась как бы отправной точкой для развития всех современных кодировок (Windows 1251, юникод, UTF 8). Изначально в нее было заложено только 128 знаков латинского алфавита, арабских цифр и еще чего-то там, но в расширенной версии появилась возможность использовать все 256 значений, которые можно закодировать в одном байте информации. Т.е. появилась возможность добавить в Аски символы букв своего языка. Тут нужно будет еще раз отвлечься, чтобы пояснить — зачем вообще нужны кодировки текстов и почему это так важно. Символы на экране вашего компьютера формируются на основе двух вещей — наборов векторных форм (представлений) всевозможных знаков (они находятся в файлах со шрифтами, которые установлены на вашем компьютере) и кода, который позволяет выдернуть из этого набора векторных форм (файла шрифта) именно тот символ, который нужно будет вставить в нужное место. Понятно, что за сами векторные формы отвечают шрифты, а вот за кодирование отвечает операционная система и используемые в ней программы. Т.е. любой текст на вашем компьютере будет представлять собой набор байтов, в каждом из которых закодирован один единственный символ этого самого текста.

Программа, отображающая этот текст на экране (текстовый редактор, браузер и т.п.), при разборе кода считывает кодировку очередного знака и ищет соответствующую ему векторную форму в нужном файле шрифта, который подключен для отображения данного текстового документа. Все просто и банально. Значит, чтобы закодировать любой нужный нам символ (например, из национального алфавита), нужно выполнить два условия: векторная форма этого знака должна быть в используемом шрифте, и этот символ можно было бы закодировать в расширенных кодировках ASCII в один байт. Поэтому таких вариантов существует целая куча. Только лишь для кодирования символов русского языка существует несколько разновидностей расширенной Аски. Например, изначально появилась
CP866
, в которой была возможность использовать символы русского алфавита, и она являлась расширенной версией ASCII. То есть, ее верхняя часть полностью совпадала с базовой версией Аски (128 символов латиницы, цифр и еще всякой лабуды), которая представлена на приведенном чуть выше скриншоте, а вот уже нижняя часть таблицы с кодировкой CP866 имела указанный на скриншоте чуть ниже вид и позволяла закодировать еще 128 знаков (русские буквы и всякая там псевдографика): Видите, в правом столбце цифры начинаются с 8, т. к. числа с 0 до 7 относятся к базовой части ASCII (см. первый скриншот). Таким образом, у кириллической буквы «М» в CP866 будет код 9С (она находится на пересечении соответствующих строки с 9 и столбца с цифрой С в шестнадцатеричной системе счисления), который можно записать в одном байте информации, и при наличии подходящего шрифта с русскими символами эта буква без проблем отобразится в тексте. Откуда взялось такое количество
псевдографики в CP866
? Тут все дело в том, что эта кодировка для русского текста разрабатывалась еще в те мохнатые года, когда графические операционные системы не были распространены как сейчас. А в Досе и подобных ей текстовых операционках псевдографика позволяла хоть как-то разнообразить оформление текстов и поэтому ею изобилует CP866 и все другие ее ровесницы из разряда расширенных версий Аски. CP866 распространяла компания IBM, но кроме этого для символов русского языка были разработаны еще ряд кодировок, например, к этому же типу (расширенных ASCII) можно отнести KOI8-R: Принцип ее работы остался тот же самый, что и у описанной чуть ранее CP866 — каждый символ текста кодируется одним единственным байтом. На скриншоте показана вторая половина таблицы KOI8-R, т.к. первая половина полностью соответствует базовой Аски, которая показана на первом скриншоте в этой статье. Среди особенностей кодировки KOI8-R можно отметить то, что кириллические буквы в ее таблице идут не в алфавитном порядке, как это сделали в CP866. Если посмотрите на самый первый скриншот (базовой части, которая входит во все расширенные кодировки), то заметите, что в KOI8-R русские буквы расположены в тех же ячейках таблицы, что и созвучные им буквы латинского алфавита из первой части таблицы. Это было сделано для удобства перехода с русских символов на латинские путем отбрасывания всего одного бита (два в седьмой степени или 128).

Windows 1251 — современная версия ASCII и почему вылезают кракозябры

Дальнейшее развитие кодировок текста было связано с тем, что набирали популярность графические операционные системы и необходимость использования псевдографики в них со временем пропала. В результате возникла целая группа, которая по своей сути по-прежнему являлись расширенными версиями Аски (один символ текста кодируется всего одним байтом информации), но уже без использования символов псевдографики. Они относились к так называемым ANSI кодировкам, которые были разработаны американским институтом стандартизации. В просторечии еще использовалось название кириллица для варианта с поддержкой русского языка. Примером такой может служить Windows 1251. Она выгодно отличалась от используемых ранее CP866 и KOI8-R тем, что место символов псевдографики в ней заняли недостающие символы русской типографики (окромя знака ударения), а также символы, используемые в близких к русскому славянских языках (украинскому, белорусскому и т.д.): Из-за такого обилия кодировок русского языка, у производителей шрифтов и производителей программного обеспечения постоянно возникала головная боль, а у нас с вам, уважаемые читатели, зачастую вылезали те самые пресловутые кракозябры, когда происходила путаница с используемой в тексте версией. Очень часто они вылезали при отправке и получении сообщений по электронной почте, что повлекло за собой создание очень сложных перекодировочных таблиц, которые, собственно, решить эту проблему в корне не смогли, и зачастую пользователи для переписки использовали транслит латинских букв, чтобы избежать пресловутых кракозябров при использовании русских кодировок подобных CP866, KOI8-R или Windows 1251. По сути, кракозябры, вылазящие вместо русского текста, были результатом некорректного использования кодировки данного языка, которая не соответствовала той, в которой было закодировано текстовое сообщение изначально. Допустим, если символы, закодированные с помощью CP866, попробовать отобразить, используя кодовую таблицу Windows 1251, то эти самые кракозябры (бессмысленный набор знаков) и вылезут, полностью заменив собой текст сообщения. Аналогичная ситуация очень часто возникает при создании и настройке сайтов, форумов или блогов, когда текст с русскими символами по ошибке сохраняется не в той кодировке, которая используется на сайте по умолчанию, или же не в том текстовом редакторе, который добавляет в код отсебятину не видимую невооруженным глазом. В конце концов такая ситуация с множеством кодировок и постоянно вылезающими кракозябрами многим надоела, появились предпосылки к созданию новой универсальной вариации, которая бы заменила собой все существующие и решила бы проблему с появлением не читаемых текстов. Кроме этого существовала проблема языков подобных китайскому, где символов языка было гораздо больше, чем 256.

Юникод (Unicode) — универсальные кодировки UTF 8, 16 и 32

Эти тысячи знаков языковой группы юго-восточной Азии никак невозможно было описать в одном байте информации, который выделялся для кодирования символов в расширенных версиях ASCII. В результате был создан консорциум под названием Юникод (Unicode — Unicode Consortium) при сотрудничестве многих лидеров IT индустрии (те, кто производит софт, кто кодирует железо, кто создает шрифты), которые были заинтересованы в появлении универсальной кодировки текста. Первой вариацией, вышедшей под эгидой консорциума Юникод, была UTF 32. Цифра в названии кодировки означает количество бит, которое используется для кодирования одного символа. 32 бита составляют 4 байта информации, которые понадобятся для кодирования одного единственного знака в новой универсальной кодировке UTF. В результате чего один и тот же файл с текстом, закодированный в расширенной версии ASCII и в UTF-32, в последнем случае будет иметь размер (весить) в четыре раза больше. Это плохо, но зато теперь у нас появилась возможность закодировать с помощью ЮТФ число знаков, равное двум в тридцать второй степени (миллиарды символов, которые покроют любое реально необходимое значение с колоссальным запасом). Но многим странам с языками европейской группы такое огромное количество знаков использовать в кодировке вовсе и не было необходимости, однако при задействовании UTF-32 они ни за что ни про что получали четырехкратное увеличение веса текстовых документов, а в результате и увеличение объема интернет-трафика и объема хранимых данных. Это много, и такое расточительство себе никто не мог позволить. В результате развития Юникода появилась UTF-16, которая получилась настолько удачной, что была принята по умолчанию как базовое пространство для всех символов, которые у нас используются. Она использует два байта для кодирования одного знака. Давайте посмотрим, как это дело выглядит. В операционной системе Windows вы можете пройти по пути «Пуск» — «Программы» — «Стандартные» — «Служебные» — «Таблица символов». В результате откроется таблица с векторными формами всех установленных у вас в системе шрифтов. Если вы выберете в «Дополнительных параметрах» набор знаков Юникод, сможете увидеть для каждого шрифта в отдельности весь ассортимент входящих в него символов. Кстати, щелкнув по любому из них, вы сможете увидеть его двухбайтовый код в формате UTF-16, состоящий из четырех шестнадцатеричных цифр: Сколько символов можно закодировать в UTF-16 с помощью 16 бит? 65 536 (два в степени шестнадцать), и именно это число было принято за базовое пространство в Юникоде. Помимо этого существуют способы закодировать с помощью нее и около двух миллионов знаков, но ограничились расширенным пространством в миллион символов текста. Но даже эта удачная версия кодировки Юникода не принесла особого удовлетворения тем, кто писал, допустим, программы только на английском языке, ибо у них после перехода от расширенной версии ASCII к UTF-16, вес документов увеличивался в два раза (один байт на один символ в Аски и два байта на тот же самый символ в ЮТФ-16). Вот именно для удовлетворения всех и вся в консорциуме Unicode было решено придумать кодировку переменной длины. Ее назвали UTF-8. Несмотря на восьмерку в названии, она действительно имеет переменную длину, т.е. каждый символ текста может быть закодирован в последовательность длиной от одного до шести байт. На практике же в UTF-8 используется только диапазон от одного до четырех байт, потому что за четырьмя байтами кода ничего уже даже теоретически не возможно представить. Все латинские знаки в ней кодируются в один байт, так же как и в старой доброй ASCII. Что примечательно, в случае кодирования только латиницы, даже те программы, которые не понимают Юникод, все равно прочитают то, что закодировано в ЮТФ-8. То есть, базовая часть Аски просто перешла в это детище консорциума Unicode. Кириллические же знаки в UTF-8 кодируются в два байта, а, например, грузинские — в три байта. Консорциум Юникод после создания UTF 16 и 8 решил основную проблему — теперь у нас в шрифтах существует единое кодовое пространство. И теперь их производителям остается только исходя из своих сил и возможностей заполнять его векторными формами символов текста. В приведенной чуть выше «Таблице символов» видно, что разные шрифты поддерживают разное количество знаков. Некоторые насыщенные символами Юникода шрифты могут весить очень прилично. Но зато теперь они отличаются не тем, что они созданы для разных кодировок, а тем, что производитель шрифта заполнил или не заполнил единое кодовое пространство теми или иными векторными формами до конца.

Кракозябры вместо русских букв — как исправить

Давайте теперь посмотрим, как появляются вместо текста кракозябры или, другими словами, как выбирается правильная кодировка для русского текста. Собственно, она задается в той программе, в которой вы создаете или редактируете этот самый текст, или же код с использованием текстовых фрагментов. Для редактирования и создания текстовых файлов лично я использую очень хороший, на мой взгляд, Html и PHP редактор Notepad++. Впрочем, он может подсвечивать синтаксис еще доброй сотни языков программирования и разметки, а также имеет возможность расширения с помощью плагинов. Читайте подробный обзор этой замечательной программы по приведенной ссылке. В верхнем меню Notepad++ есть пункт «Кодировки», где у вас будет возможность преобразовать уже имеющийся вариант в тот, который используется на вашем сайте по умолчанию: В случае сайта на Joomla 1.5 и выше, а также в случае блога на WordPress следует во избежании появления кракозябров выбирать вариант UTF 8 без BOM. А что такое приставка BOM? Дело в том, что когда разрабатывали кодировку ЮТФ-16, зачем-то решили прикрутить к ней такую вещь, как возможность записывать код символа, как в прямой последовательности (например, 0A15), так и в обратной (150A). А для того, чтобы программы понимали, в какой именно последовательности читать коды, и был придуман BOM (Byte Order Mark или, другими словами, сигнатура), которая выражалась в добавлении трех дополнительных байтов в самое начало документов. В кодировке UTF-8 никаких BOM предусмотрено в консорциуме Юникод не было и поэтому добавление сигнатуры (этих самых пресловутых дополнительных трех байтов в начало документа) некоторым программам просто-напросто мешает читать код. Поэтому мы всегда при сохранении файлов в ЮТФ должны выбирать вариант без BOM (без сигнатуры). Таким образом, вы заранее обезопасите себя от вылезания кракозябров. Что примечательно, некоторые программы в Windows не умеют этого делать (не умеют сохранять текст в ЮТФ-8 без BOM), например, все тот же пресловутый Блокнот Windows. Он сохраняет документ в UTF-8, но все равно добавляет в его начало сигнатуру (три дополнительных байта). Причем эти байты будут всегда одни и те же — читать код в прямой последовательности. Но на серверах из-за этой мелочи может возникнуть проблема — вылезут кракозябры. Поэтому ни в коем случае не пользуйтесь обычным блокнотом Windows для редактирования документов вашего сайта, если не хотите появления кракозябров. Лучшим и наиболее простым вариантом я считаю уже упомянутый редактор Notepad++, который практически не имеет недостатков и состоит из одних лишь достоинств. В Notepad ++ при выборе кодировки у вас будет возможность преобразовать текст в кодировку UCS-2, которая по своей сути очень близка к стандарту Юникод. Также в Нотепаде можно будет закодировать текст в ANSI, т.е. применительно к русскому языку это будет уже описанная нами чуть выше Windows 1251. Откуда берется эта информация? Она прописана в реестре вашей операционной системы Windows — какую кодировку выбирать в случае ANSI, какую выбирать в случае OEM (для русского языка это будет CP866). Если вы установите на своем компьютере другой язык по умолчанию, то и эти кодировки будут заменены на аналогичные из разряда ANSI или OEM для того самого языка. После того, как вы в Notepad++ сохраните документ в нужной вам кодировке или же откроете документ с сайта для редактирования, то в правом нижнем углу редактора сможете увидеть ее название: Чтобы избежать кракозябров, кроме описанных выше действий, будет полезным прописать в его шапке исходного кода всех страниц сайта информацию об этой самой кодировке, чтобы на сервере или локальном хосте не возникло путаницы. Вообще, во всех языках гипертекстовой разметки кроме Html используется специальное объявление xml, в котором указывается кодировка текста.

<?xml version="1.0" encoding="windows-1251"?>

Прежде, чем начать разбирать код, браузер узнает, какая версия используется и как именно нужно интерпретировать коды символов этого языка. Но что примечательно, если вы сохраняете документ в принятом по умолчанию юникоде, это объявление xml можно будет опустить (кодировка будет считаться UTF-8, если нет BOM или ЮТФ-16, если BOM есть). В случае же документа языка Html для указания кодировки используется элемент Meta, который прописывается между открывающим и закрывающим тегом Head:

<head>
...
<meta charset="utf-8">
...
</head>

Эта запись довольно сильно отличается от принятой в стандарте в Html 4.01, но полностью соответствует стандарту Html 5, и она будет стопроцентно правильно понята любыми используемыми на текущий момент браузерами. По идее элемент Meta с указание кодировки Html документа лучше будет ставить как можно выше в шапке документа, чтобы на момент встречи в тексте первого знака не из базовой ANSI (которые правильно прочитаются всегда и в любой вариации) браузер уже должен иметь информацию о том, как интерпретировать коды этих символов. Ссылка на первоисточник: Кодировка текста ASCII (Windows 1251, CP866, KOI8-R) и Юникод (UTF 8, 16, 32) — как исправить проблему с кракозябрами

Как определить набор символов, используемый Windows на тайваньском языке?

спросил

Изменено 7 лет назад

Просмотрено 780 раз

Я использую Windows 7 Home в Тайваньский на работе, и знание используемого набора символов было бы для меня бесценным.

  • Как определить набор символов, используемый Windows на тайваньском языке?

Я читал, что кодовая страница Microsoft 950 является известным вариантом кодировки символов Taiwan Big5 (википедия), но я хочу быть уверенным.

Если поможет, вот скриншот шрифта по умолчанию, используемого в блокноте: (изображение скопировано из этой оригинальной ссылки):

  • windows-7
  • кодировка символов
  • китайский
  • набор символов

По справочнику API поддержки национальных языков (NLS), Китайский (Тайвань) Идентификатор LCID/культуры: 0x0404 (= 1028 в десятичном формате). Кодовая страница OEM , а также кодовая страница ANSI : 950 . Вы можете убедиться в этом с помощью команды PowerShell

 Get-Culture | Format-Custom -Property TextInfo
 

или, если китайский (Тайвань) не , язык вашей системы:

 [System. Globalization.CultureInfo]::GetCultureInfo(0x0404) | `
    Format-Custom -Property TextInfo
 

Выход :

 класс CultureInfo
{
  ТекстИнфо =
    класс ТекстИнфо
    {
      АНСИкодепаже = 950
      ОЕМкодепаже = 950
      МакКодПейдж = 10002
      EBCDICCodePage = 500
      LCID = 1028
      CultureName = zh-TW
      ТолькоЧитать = Истина
      Разделитель списка = ,
      ИсправоЛефт = Ложь
    }
}
 

В другой статье Microsoft кодовая страница 950 называется Традиционный китайский Big5.

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie

.

окон — Изменяет ли буфер обмена кодировку символов?

спросил

Изменено 1 год, 10 месяцев назад

Просмотрено 1к раз

У меня возникла проблема, связанная с UTF8, в программном обеспечении — оно жалуется, что некоторый текст, содержащий специальные символы, не является допустимым UTF8. Но всякий раз, когда я копирую и вставляю его в онлайн-инструмент проверки или в электронное письмо в группе пользователей, он сообщает как действительный UTF8.

Есть подозрение, что это может быть какой-то старый формат до UTF8, но мне интересно, как только он попадет в буфер обмена или будет вставлен в мой браузер, он будет преобразован в UTF8? Это первый вопрос.

«Оскорбительный» текст представлен на веб-странице HTTP, поэтому, во-вторых, как я могу точно увидеть, что обслуживается, как именно представлены специальные символы?

  • windows
  • google-chrome
  • буфер обмена
  • кодировка символов

Буфер обмена содержит копию, а затем позже вставляет ее в принимающее приложение.

Буфер обмена не меняет кодировку символов или другие атрибуты по пути.

Старые специальные символы могут вызывать проблемы как в исходном, так и в принимающем приложении, поэтому вам следует обновить эти символы.

API буфера обмена в Windows может выполнять преобразование между многими форматами, но не все форматы.

Узнать, что на самом деле помещается в буфер обмена, и отличный инструмент есть Бесплатное средство просмотра буфера обмена, которые могут помочь в анализе, где проблема.

Если это не решит загадку, пожалуйста, дайте указания, как мне сделать дубликат копия. В качестве еще одного теста вы также можете скопировать текст, который явно имеет кодировку UTF-8, например, из Notepad++, где установлена ​​кодировка UTF-8, и протестируйте ее.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *