Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC_Lect.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
15 Мб
Скачать
☆

1.3.Работа со строками

Примеры преобразования строк символов в различные форматы представления см. в MSDN:

ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_vcmcpp/html/e7e4f741-3c82-45f0-b8c0-1e1e343b0e77.htm

Эту ссылку надо поместить в элемент ввода URL в окне MSDN.

Очень хорошо различные кодировки символов и обработка символов с строк в целом изложены в работе Д.Рихтера и Назара [«Работа с символами и строками» 8а].

1.3.1.Кодировки и кодовые страницы

Обработка строк (символов) в языке С++ является, как на мой взгляд, одной из самых сложных или, скорее, запутанных задач. Это связано с наличием следующих, как говорят юристы, «отягчающих обстоятельств».

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

Во-вторых, слабая поддержка кодировки символов кириллицы (здесь имеются ввиду кодировки символов кириллицы в MS DOS и Windows) в инструментальных средствах.

В-третьих, наличие многочисленных кодировок: ASCII (7 или 8 бит), ANSI (8 бит), Multibyte Character Sets (MBCSs – 16 бит), Unicode (UTF-7, UTF-8,UTF-16,UTF-32, UTF-32 Big-Endian).

Терминология. Ucs Transformation Format (UTF) – формат преобразования UCS. Universal Character Set (UCS) – универсальный набор символов ISO 10646, надмножество Unicode, имеет 31-битовое кодовое пространство.

Для справки. Найти кодовые страницы (CP – code page) и их краткую характеристику можно в MSDN (MVS-2005) по индексу Encoding class→About encoding class. Некоторые кодовые страницы приведены в табл. 2. Символ * в столбце «Примечание» означает, что кодовая страница непосредственным образом поддерживается инфраструктурой .NET вне зависимости от базовой платформы.

Таблица 2

Краткая характеристика некоторых кодовых страниц

Code Page

(кодовая страница)

Name

(имя)

Display Name

(полное имя)

Примечание

850

ibm850

Western European (DOS)

852

ibm852

Central European (DOS)

855

IBM855

OEM Cyrillic

866

cp866

Cyrillic (DOS)

1149

IBM01149

IBM EBCDIC (Icelandic-Euro)

1250

windows-1250

Central European (Windows)

1251

windows-1251

Cyrillic (Windows)

1252

Windows-1252

Western European (Windows)

*

10017

x-mac-ukrainian

Ukrainian (Mac)

20127

us-ascii

US-ASCII

*

20866

koi8-r

Cyrillic (KOI8-R)

21866

koi8-u

Cyrillic (KOI8-U)

28591

iso-8859-1

Western European (ISO)

*

28592

iso-8859-2

Central European (ISO)

28595

iso-8859-5

Cyrillic (ISO)

65000

utf-7

Unicode (UTF-7)

*

65001

utf-8

Unicode (UTF-8)

*

65005

utf-32

Unicode (UTF-32)

Если Вы хотите в своем программном коде разобраться с тем, какое число байт занимает символ или переменная какого-либо символьного типа, воспользуйтесь операцией sizeof. Например, в консольном приложении (среда MVS-2005) это можно сделать так:

cout<<sizeof (char) <<endl; //выводит 1

cout<<sizeof (TCHAR) <<endl; /*выводит 2 или 1 в зависимости от

выбранной кодировки */

cout<<sizeof (wchar_t)<<endl; //выводит 2

cout<<sizeof ('a') <<endl; //выводит 1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]