UTF-8
От: Аноним  
Дата: 18.05.09 06:45
Оценка: :)))
Господа, я слегка не понимаю как может один символ в кодировке UTF-8 быть представлен 4-6 байтами ?
КАК потом процессор сливает эти байты для того чтобы получить один байт для отображения символа ?
Вот этот алгоритм очень интересен ?
А не всякие пространные статьи о том как появилась эта кодировка да зачем она нужна как в википедии !
Re: UTF-8
От: migel  
Дата: 18.05.09 06:59
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А> А не всякие пространные статьи о том как появилась эта кодировка да зачем она нужна как в википедии !

Тогда вам сюда
... << RSDN@Home 1.2.0 alpha 4 rev. 1090>>
Re: UTF-8
От: Аноним  
Дата: 18.05.09 07:12
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Господа, я слегка не понимаю как может один символ в кодировке UTF-8 быть представлен 4-6 байтами ?


Если "символ" имеется ввиду unicode то 6-ю — нет. А вот 4-мя — да.
Re: UTF-8
От: Аноним  
Дата: 18.05.09 07:17
Оценка:
напрямую работать с юникодом (кодированным больше чем одним байтом на символ) в опкодах процессора, наверное, никак. зато есть поддержка в ЯВУ


Здравствуйте, Аноним, Вы писали:

А>Господа, я слегка не понимаю как может один символ в кодировке UTF-8 быть представлен 4-6 байтами ?

А> КАК потом процессор сливает эти байты для того чтобы получить один байт для отображения символа ?
А> Вот этот алгоритм очень интересен ?
А> А не всякие пространные статьи о том как появилась эта кодировка да зачем она нужна как в википедии !
Re: UTF-8
От: Mr.Cat  
Дата: 18.05.09 07:32
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Господа, я слегка не понимаю как может один символ в кодировке UTF-8 быть представлен 4-6 байтами ?
А> КАК потом процессор сливает эти байты для того чтобы получить один байт для отображения символа ?
А зачем потом сливать эти байты? Почему это для отображения нужен именно 1 байт?
Если тебя интересует отображение символов на экране в текстовом режиме — погугли, как реализованы консольные шрифты в линупсе. Но суть приблизительно в том, что юникод преобразовывается в однобайтную кодировку, т.е. с поддержкой только латиницы и еще одного алфавита.
UTF-8
От: Аноним  
Дата: 18.05.09 07:34
Оценка:
#Имя: FAQ.unicode
Здравствуйте, Аноним, Вы писали:

>Господа, я слегка не понимаю как может один символ в кодировке UTF-8 быть представлен 4-6 байтами ?


Прочитай вот эту неплохую статью для начинающих.
unicode
Re[2]: UTF-8
От: Аноним  
Дата: 18.05.09 08:47
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, Аноним, Вы писали:

А>>Господа, я слегка не понимаю как может один символ в кодировке UTF-8 быть представлен 4-6 байтами ?
А>> КАК потом процессор сливает эти байты для того чтобы получить один байт для отображения символа ?
MC>А зачем потом сливать эти байты? Почему это для отображения нужен именно 1 байт?
MC>Если тебя интересует отображение символов на экране в текстовом режиме — погугли, как реализованы консольные шрифты в линупсе. Но суть приблизительно в том, что юникод преобразовывается в однобайтную кодировку, т.е. с поддержкой только латиницы и еще одного алфавита.

А говорите зачем вам 1 байт — затем чтобы точно указать какой символ надо нарисовать .
А тогда если используется 1-6 байт для задания адреса этого нужного символа то как по какому алгоритму формируется этот самый адрес(указатель)?
Эти 1-6 байт подвергают логическому сложению вычитанию логическому или может быть просто сложению ?
И потом если это адрес по анилогии с адресом в памяти компьютера он должен иметь конкретный вид в виде адреса а не в виде разрозненых байт .
Re[3]: UTF-8
От: Mr.Cat  
Дата: 18.05.09 09:23
Оценка:
Здравствуйте, Аноним, Вы писали:

А> А говорите зачем вам 1 байт — затем чтобы точно указать какой символ надо нарисовать .

Блин, почему именно 1 байт-то? Не 2, не 4, не 8,а имеенно 1?

А> А тогда если используется 1-6 байт для задания адреса этого нужного символа то как по какому алгоритму формируется этот самый адрес(указатель)?

Какой еще адрес? Если тебе нужно получить значение юникодного кодпоинта — пожалуйста, это достигается перестановкой бит (см. википедийную статью о utf-8). Если тебе нужно выдернуть глиф из шрифта — надо смотреть описание формата этого шрифта, наверняка кодпоинт действительно преобразуется в какой-то адрес в файле (но вряд ли этот адрес состоит из 1 байта ). Короче, скажи, что конкретно ты хочешь сделать юникодной строкой.
Re: UTF-8
От: AleksandrN Россия  
Дата: 18.05.09 10:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Господа, я слегка не понимаю как может один символ в кодировке UTF-8 быть представлен 4-6 байтами ?

А> КАК потом процессор сливает эти байты для того чтобы получить один байт для отображения символа ?
А> Вот этот алгоритм очень интересен ?
А> А не всякие пространные статьи о том как появилась эта кодировка да зачем она нужна как в википедии !

Прочитай стандарт и посмотри исходники утилит и библиотек, в которых реализована работа с этой кодировкой.
Re[4]: UTF-8
От: Аноним  
Дата: 18.05.09 10:08
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, Аноним, Вы писали:


А>> А говорите зачем вам 1 байт — затем чтобы точно указать какой символ надо нарисовать .

MC>Блин, почему именно 1 байт-то? Не 2, не 4, не 8,а имеенно 1?

А>> А тогда если используется 1-6 байт для задания адреса этого нужного символа то как по какому алгоритму формируется этот самый адрес(указатель)?

MC>Какой еще адрес? Если тебе нужно получить значение юникодного кодпоинта — пожалуйста, это достигается перестановкой бит (см. википедийную статью о utf-8). Если тебе нужно выдернуть глиф из шрифта — надо смотреть описание формата этого шрифта, наверняка кодпоинт действительно преобразуется в какой-то адрес в файле (но вряд ли этот адрес состоит из 1 байта ). Короче, скажи, что конкретно ты хочешь сделать юникодной строкой.

ТАК я так и говорю, что пытаюсь декодировать последовательность
!B@>:0A@CAA:8<B5:AB>< — вот так предствлена строка

А вот так она должна была выводиться: "Строка с русским текстом"
Re[5]: UTF-8
От: Mr.Cat  
Дата: 18.05.09 10:12
Оценка:
Здравствуйте, Аноним, Вы писали:
А>!B@>:0A@CAA:8<B5:AB>< — вот так предствлена строка
Где ты видишь строку в таком виде (например, если ты выводишь ее на экран, то покажи исходник программы)? Откуда ты эту строку получил? Как строка у тебя хранится (например, в char* или wchar* или еще как-то)? В какой она кодировке?
Re[6]: UTF-8
От: Аноним  
Дата: 18.05.09 11:18
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

MC>Здравствуйте, Аноним, Вы писали:

А>>!B@>:0A@CAA:8<B5:AB>< — вот так предствлена строка
MC>Где ты видишь строку в таком виде (например, если ты выводишь ее на экран, то покажи исходник программы)? Откуда ты эту строку получил? Как строка у тебя хранится (например, в char* или wchar* или еще как-то)? В какой она кодировке?

Х.З. в какой она кодировке это строка в браузер выводится .
test.js формирует документ и отправляет в XPCOM компанент который в памяти висит строку .
Другой процедурой в этом же test.js он слушает строку от xpcom и показывает ее на экране.
Отправляет строку он в char* И слушает тоже в нем.
test.js отправляет строку скажем "Строка с русским текстом";
А получает он !B@>:0A@CAA:8<B5:AB
У меня есть сильные подозрения, что читая побайтно т.е. char он не видит связи с соседними байтами в которых как раз и скрыт UTF-8
Надо бы в wchar_t читать но этого не может сделать .js
А так как он читает побайтно то надо как то обьединить прочитанные байты для получения UTF — по 2 бай та по 4 ..... пока не ясно.
И как их объединить тоже пока не понятно.
Может быть так — читать строку char-оф по 2 байта и проверять на маску каждый байт на >128 и как только >128 то читать второй байт и && два байта чтобы выяснить код русской буквы.
Re[2]: UTF-8
От: Кодт Россия  
Дата: 18.05.09 12:09
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

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


В однобайтную ли?
То есть, китайский текстовый режим недоступен? (Хотя в ДОС как-то это умели).
И к тому же, линукс умеет и любит эмулировать текстовый режим графикой, с произвольными консольными шрифтами. Может, и utf-8 поддерживает?
... << RSDN@Home 1.2.0 alpha 4 rev. 1207>>
http://files.rsdn.org/4783/catsmiley.gif Перекуём баги на фичи!
Re[7]: UTF-8
От: alsemm Россия  
Дата: 18.05.09 13:27
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Может быть так — читать строку char-оф по 2 байта и проверять на маску каждый байт на >128 и как только >128 то читать второй байт и && два байта чтобы выяснить код русской буквы.

Надо на js реализовать функцию utf8ToUtf16() или взять готовое: http://74.125.77.132/search?q=cache:slqVwz8Vo1YJ:www.onicos.com/staff/iz/amuse/javascript/expert/utf.txt+utf8+To+Utf16+javascript&amp;cd=3&amp;hl=en&amp;ct=clnk&amp;gl=uk&amp;client=firefox-a:

function utf8to16(str) {
    var out, i, len, c;
    var char2, char3;

    out = "";
    len = str.length;
    i = 0;
    while(i < len) {
    c = str.charCodeAt(i++);
    switch(c >> 4)
    { 
      case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
        // 0xxxxxxx
        out += str.charAt(i-1);
        break;
      case 12: case 13:
        // 110x xxxx   10xx xxxx
        char2 = str.charCodeAt(i++);
        out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
        break;
      case 14:
        // 1110 xxxx  10xx xxxx  10xx xxxx
        char2 = str.charCodeAt(i++);
        char3 = str.charCodeAt(i++);
        out += String.fromCharCode(((c & 0x0F) << 12) |
                       ((char2 & 0x3F) << 6) |
                       ((char3 & 0x3F) << 0));
        break;
    }
    }

    return out;
}


utf8to16() сойдет только для валидных utf8 строк, т.е. ошбки в входной строке она не распознает
Re[5]: UTF-8
От: Аноним  
Дата: 18.05.09 14:25
Оценка:
А>>> А тогда если используется 1-6 байт для задания адреса этого нужного символа то как по какому алгоритму формируется этот самый адрес(указатель)?
MC>>Какой еще адрес? Если тебе нужно получить значение юникодного кодпоинта — пожалуйста, это достигается перестановкой бит (см. википедийную статью о utf-8). Если тебе нужно выдернуть глиф из шрифта — надо смотреть описание формата этого шрифта, наверняка кодпоинт действительно преобразуется в какой-то адрес в файле (но вряд ли этот адрес состоит из 1 байта ). Короче, скажи, что конкретно ты хочешь сделать юникодной строкой.
А> ТАК я так и говорю, что пытаюсь декодировать последовательность
А> !B@>:0A@CAA:8<B5:AB>< — вот так предствлена строка
А> А вот так она должна была выводиться: "Строка с русским текстом"

Вывод строки — это рисование ее на графическом девайсе. Экране или принтере. Для этого кажыдй символ в один байт представлять совсем необязательно. Алгоритм простой
1) Декодируем от одного до нескольких байт, которые должны выводиться как один символ.
2) Рисуем этот символ. Именно рисуем — битмап выводим на девайс. Для этого представление в \один байт\ не нужно.
3) Если не конец строки — переходим на 1)
Re[3]: UTF-8
От: Mr.Cat  
Дата: 18.05.09 15:40
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, Mr.Cat, Вы писали:


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


К>В однобайтную ли?

К>То есть, китайский текстовый режим недоступен? (Хотя в ДОС как-то это умели).
А сколько нужно для китайского? Честно говоря, мне почему-то запомнился максимум 512 символов (либо 256 + возможность иметь другое начертание — например, жирное). Впрочем, могу заблуждаться — надо гуглить.

К>И к тому же, линукс умеет и любит эмулировать текстовый режим графикой, с произвольными консольными шрифтами. Может, и utf-8 поддерживает?

Как оно при фреймбуффере — я тем более хз.
Re[5]: UTF-8
От: Кодт Россия  
Дата: 18.05.09 15:46
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А> ТАК я так и говорю, что пытаюсь декодировать последовательность

А> !B@>:0A@CAA:8<B5:AB>< — вот так предствлена строка

Похоже на UUEncode, но не UUEncode.

Либо это срезка — кривая трансляция 8-битной кодировки (в т.ч. мультибайтной) в 7-битную. Срезка иногда возникает при копипасте через не-юникодные программы или не-юникодные шрифты.

Может быть, ты попробуешь не наобум декодировать, а узнаешь сам и расскажешь нам, каким способом закодирован этот текст.
Если с этим возникают сложности, то покажи — откуда ты взял текст. Вдруг там рядом есть какие-нибудь заголовки (MIME или ещё что), из которых станет ясно.

А то вдруг окажется, что это ты прочёл зазипованный поток, и сперва нужно его раззиповать
... << RSDN@Home 1.2.0 alpha 4 rev. 1207>>
http://files.rsdn.org/4783/catsmiley.gif Перекуём баги на фичи!
Re[4]: UTF-8
От: Кодт Россия  
Дата: 18.05.09 15:51
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

К>>То есть, китайский текстовый режим недоступен? (Хотя в ДОС как-то это умели).

MC>А сколько нужно для китайского? Честно говоря, мне почему-то запомнился максимум 512 символов (либо 256 + возможность иметь другое начертание — например, жирное). Впрочем, могу заблуждаться — надо гуглить.

Э, я с китайским досом только в ознакомительных целях ознакомлялся (точнее, с китайским win95).
Точно помню, что по два байта на символ.
А вообще, китайская кодовая страница здоровая, точно больше 512 иероглифов.

К>>И к тому же, линукс умеет и любит эмулировать текстовый режим графикой, с произвольными консольными шрифтами. Может, и utf-8 поддерживает?

MC>Как оно при фреймбуффере — я тем более хз.

Во. ключевое слово "фреймбуфер". Погуглю на досуге.
... << RSDN@Home 1.2.0 alpha 4 rev. 1207>>
http://files.rsdn.org/4783/catsmiley.gif Перекуём баги на фичи!
Re[7]: UTF-8
От: Mr.Cat  
Дата: 18.05.09 16:12
Оценка: +1
Здравствуйте, Аноним, Вы писали:
А> test.js формирует документ и отправляет в XPCOM компанент который в памяти висит строку .
А ты вот эту штуку читал: https://developer.mozilla.org/en/XPCOM_string_guide ? Может, у тебя проблема в том, что у тебя в idl тип возвращаемого значения задекларирован как string — и жаваскриптовский код клал на кодировки?
Re: UTF-8
От: Аноним  
Дата: 19.05.09 08:28
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


>>Господа, я слегка не понимаю как может один символ в кодировке UTF-8 быть представлен 4-6 байтами ?


А>Прочитай вот эту неплохую статью для начинающих.


Если уж про почитать, то курить книгу: Фень Юань — Программирование графики в Windows 2000, там и про устройство, и про хранение и про реализацию.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.