Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> кодировка UNICODE 
V
    Опции темы
iglaweb
Дата 25.9.2009, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 13.8.2009

Репутация: нет
Всего: нет



Как разделить код символа Unicode'а на два значения, подобно тому как делает char

Код

WCHAR y[MAX_PATH];
wcscpy(y,L"а");


В y заполнен только первый байт и все(1072, что соответствует символу 208 из кодировки ISO 8859-5). Как этот код числа разделить?

Код

char ch = 'а';


В ch же содержится два кода(208 и 176). Как сделать подобное с Unicode?


Это сообщение отредактировал(а) iglaweb - 25.9.2009, 00:54
PM MAIL ICQ   Вверх
586
Дата 25.9.2009, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 8
Всего: 146



Код
wchar_t ch = L'a';

это?
PM   Вверх
Lazin
Дата 25.9.2009, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



unicode, это не кодировка!!!
PM MAIL Skype GTalk   Вверх
iglaweb
Дата 25.9.2009, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 13.8.2009

Репутация: нет
Всего: нет



Цитата(586 @  25.9.2009,  01:10 Найти цитируемый пост)
это?

нет, вообще код символа почему-то 97 и все.

Добавлено через 51 секунду
Цитата(Lazin @  25.9.2009,  08:26 Найти цитируемый пост)
unicode, это не кодировка!!!

что тогда? smile 

PM MAIL ICQ   Вверх
Anikmar
Дата 25.9.2009, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(iglaweb @  25.9.2009,  00:54 Найти цитируемый пост)
В y заполнен только первый байт и все(1072, что соответствует символу 208 из кодировки ISO 8859-5). Как этот код числа разделить?

char ch = 'а';
...

В ch же содержится два кода(208 и 176). Как сделать подобное с Unicode?


Ничего не понимаю.

Цитата(Lazin @  25.9.2009,  08:26 Найти цитируемый пост)
unicode, это не кодировка!!! 

А как это назвать? Что тогда кодировка?


iglaweb, а какой у вас компилятор? И зачем вам разделять код символа на два байта?
PM MAIL ICQ   Вверх
Lazin
Дата 25.9.2009, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(iglaweb @  25.9.2009,  08:36 Найти цитируемый пост)
что тогда?

это стандарт кодирования символов
unicode текст может быть представлен в разных форматах, UTF-8, UTF-16 и тд
PM MAIL Skype GTalk   Вверх
Anikmar
Дата 25.9.2009, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(Lazin @  25.9.2009,  09:39 Найти цитируемый пост)
это стандарт кодирования символов

А что тогда кодировка?
PM MAIL ICQ   Вверх
Lazin
Дата 25.9.2009, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



PM MAIL Skype GTalk   Вверх
Anikmar
Дата 25.9.2009, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



ИМХО. Вы уж перегнули кажется с дотошностью.  smile 

Цитата(Lazin @  25.9.2009,  09:50 Найти цитируемый пост)
http://local.joelonsoftware.com/wiki/Абсол...аборах_Символов 

Во-первых статья переводная и лезть в дебри происхождения и значения слова "кодировка" пустое занятие.
Во-вторых - следуя вашей логике Уникод надо считать набором кодировок? Тогда как быть с куском уникода UCS? это именно кодировка.  smile 

ИМХО. 
Не придирайтесь к словам. Говорить фразу "В кодировке UTF-8 набора символов уникод" доллго и громоздко, чем просто "В кодировке Уникод. UTF-8".

Если вы имеете в виду, что уникод несколько больше чем просто кодировка - вы правы, но вы же говорите "указатель содержит адрес в памяти" не в даваясь в подробности организации виртуального адресного пространства  smile 

И вообще, значение слова кодировка символа в моем понимании - это то, когда по числовому коду можно идентифицировать символ алфавита либо служебный символ. Если не так - тогда надо срочно придумать другое слово  smile 


PM MAIL ICQ   Вверх
Lazin
Дата 25.9.2009, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(Anikmar @  25.9.2009,  10:35 Найти цитируемый пост)
Во-первых статья переводная и лезть в дебри происхождения и значения слова "кодировка" пустое занятие.

character encoding, кстати, оригинал найти совсем не сложно smile 

Цитата(Anikmar @  25.9.2009,  10:35 Найти цитируемый пост)
Во-вторых - следуя вашей логике Уникод надо считать набором кодировок?

Это не моя логика, это реальность, ты можешь либо работать с двоичным представлением строки, либо работать с последовательностью кодовых точек, но только тогда, когда ты знаешь, с помощью какой кодировки была закодирована(encoded) строка текста.

Можно закодировать unicode данные используя какую-нибудь кодировку; можно декодировать данные из строки байт, используя ту-же кодировку, а можно использовать неправильную кодировку и получить неправильные данные на выходе. Когда твоя программа использует wstring и wchar_t для представления текста, это не проблема, но когда программе нужно общаться с внешним миром, то строки в "кодировке юникод" неожиданно начинают выглядеть как набор крокозяблов smile 

Цитата(Anikmar @  25.9.2009,  10:35 Найти цитируемый пост)
Не придирайтесь к словам. Говорить фразу "В кодировке UTF-8 набора символов уникод" доллго и громоздко, чем просто "В кодировке Уникод. UTF-8".

Цитата(Anikmar @  25.9.2009,  10:35 Найти цитируемый пост)
Если вы имеете в виду, что уникод несколько больше чем просто кодировка - вы правы, но вы же говорите "указатель содержит адрес в памяти" не в даваясь в подробности организации виртуального адресного пространства

приблизительные формулировки, приводят к приблизительным знаниям smile 
PM MAIL Skype GTalk   Вверх
bsa
Дата 25.9.2009, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



iglaweb, char ничего никуда не разделяет.
sizeof(wchar_t) равен 2 (Windows) или 4.
sizeof(char) равен 1

L"АВБГД" - говорит компилятору, что нужно преобразовать строковый литерал в набор wchar_t

Если ты хочешь получить доступ к битовым полям, то используй для этого соответствующие методы:
Код
wchar_t c = L'Б';
std::cout << std::hex << int((c >> 8) & 0xFF) << int(c & 0xFF) << std::endl;

PM   Вверх
Anikmar
Дата 25.9.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



 smile 
Цитата(Lazin @  25.9.2009,  12:31 Найти цитируемый пост)
приблизительные формулировки, приводят к приблизительным знаниям  


Конечно программирование любит лаконичность.

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

ИМХО.
Не ради спора (собственно я даже не спорил, а мне интересно было как называть "юникод" - ведь даже в название есть корень "код"), а  ради избавления от излишней занудливости smile 
Если разобрать русское слово "кодировать" то юникод содержит код символа и некий код правила декодирования. 
Проблема в том, что одиночный символ невозможно декодировать если сказать только то, что он в кодировке юникод - тут вы совершенно правы, надо обязательно уточнить в какой именно "модификации" юникода. Но от этого юникод не перестает быть таблицей кодов символов и слово кодировка вполне к таким вещам применима.

В общем ладно - не будем офтоп разводить - не та тема.



PM MAIL ICQ   Вверх
iglaweb
Дата 25.9.2009, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 13.8.2009

Репутация: нет
Всего: нет



Короче:
Код

char hexChars[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',0x00};
string escaped("");
int c = L'а'; //с равно 1072(код символа)

Потом же я делаю так:
Код

escaped.append("%");
int j = c - 864;//Разумно ли так делать?
int h = j >> 4;//поделили нацело на 16
escaped += string(1,hexChars[h]);
h = j & 0x0F; //Нашли остаток от деления на 16
escaped += string(1,hexChars[h]);


Но так я получил только %D0, это прописная буква 'а'. Но для передачи в ссылке или в запросе кроме %D0, нужен %B0.

Вот пример:

http://yandex.ru/yandsearch?text=%D0 - В поиск забивается буква 'а'? Нет! А если так:
http://yandex.ru/yandsearch?text=%D0%B0 - Уже  она)

Мне надо было по коду символа юникода, получить в 16-ом виде код соответствующего ASCII символа (http://ru.wikipedia.org/wiki/ISO_8859-5)


Это сообщение отредактировал(а) iglaweb - 25.9.2009, 16:38
PM MAIL ICQ   Вверх
iglaweb
Дата 25.9.2009, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 13.8.2009

Репутация: нет
Всего: нет



PM MAIL ICQ   Вверх
bsa
Дата 25.9.2009, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



iglaweb, я тебе скажу, что ты извращенец, причем в жесткой форме.
Код
wchar_t w = L'а';
std::ostringstream stream;
stream << '%' << std::hex <<  (w >> 8) & 0xFF) << '%' << (w & 0xFF);
escaped += stream.str();

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0602 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.