Поделиться через


Двухбайтовые кодировки

Двухбайтовая кодировка (DBCS), также известная как "расширенная 8-разрядная кодировка", — это расширенная однобайтовая кодировка (SBCS), реализованная в виде кодовой страницы. DBCSs были первоначально разработаны для расширения структуры SBCS для обработки таких языков, как японский и китайский. Некоторые символы в DBCS, включая цифры и буквы, используемые для написания английского языка, имеют однобайтовые значения кода. Другие символы, например китайские идографы или японские кандзи, имеют значения двухбайтового кода. DBCS может соответствовать кодовой странице Windows или кодовой странице OEM. Кодовая страница DBCS также может содержать не машинную кодовую страницу, например кодовую страницу EBCDIC. Определения этих кодовых страниц см. в разделе Code Pages.

Примечание

Новые приложения Windows должны использовать Юникод , чтобы избежать несоответствий различных кодовых страниц и упростить локализацию. Однако для некоторых устаревших протоколов может потребоваться использование кодовых страниц DBCS. Каждая кодовая страница DBCS поддерживает разные символы, но никакая страница не поддерживает полный набор символов, предоставляемых Юникодом. Каждая кодовая страница DBCS поддерживает другое подмножество с разными кодировками. Данные, преобразованные из одной кодовой страницы DBCS в другую, могут быть повреждены, так как одно и то же значение данных на разных кодовой странице может кодировать другой символ. Данные, преобразованные из Юникода в DBCS, могут быть потеряны, так как данная кодовая страница может не представлять все символы, используемые в данных Юникода.

 

Чтобы интерпретировать строку DBCS, приложение должно запускаться в начале строки и сканировать вперед. Он отслеживает, когда обнаруживает байт свинца в строке, и рассматривает следующий байт как завершающую часть того же символа. Если приложение просто сканирует строку по одному байту за раз и обнаруживает байт, который представляет собой значение кода, представляющее обратную косую черту ("\"), этот байт может быть просто байтом после двухбайтового символа. Приложение не может просто создать резервную копию одного байта, чтобы узнать, является ли предыдущий байт байтом свинца, так как это значение байта может использоваться как в качестве байта свинца, так и в качестве следового байта. Таким образом, приложение имеет практически те же проблемы с ним, что и с возможной обратной косой чертой. Иными словами, поиск по подстрокам гораздо сложнее с DBCS, чем с SBCS или Юникодом. Соответственно, приложения, поддерживающие DBCS, должны использовать специальные функции, такие как _mbsstr, вместо функции StrStr .

Приложения используют кодовые страницы Windows DBCS с версиями "A" функций Windows. См. статью Соглашения для прототипов функций и кодовые страницы. Чтобы определить кодовую страницу DBCS, приложение может использовать функцию GetCPInfo или GetCPInfoEx . Приложение может использовать функцию IsDBCSLeadByte , чтобы определить, можно ли использовать заданное значение в качестве байта 2-байтового символа. Кроме того, приложение может использовать функции MultiByteToWideChar и WideCharToMultiByte для сопоставления строк Юникода и DBCS.

Кодировки

Однобайтовые кодировки