?

Log in

No account? Create an account
для комментов
 
[Most Recent Entries] [Calendar View] [Friends]

Below are the 8 most recent journal entries recorded in 4mycomments' LiveJournal:

Sunday, December 28th, 2014
10:42 pm
опять про кодировки
Думаю, маппинг между кодом символа и его отображением на экране находится в файле шрифта. А принцип отображения такой: система каким-то образом получает данные о том, каковы таблица символов (charset) и кодировка (encoding) текста , который нужно будет отображать. Далее с помощью кодировки (encoding) наборы байтов, которые представляют собой символы текста, переводятся в код пониты (или числа, которым соответствуют символы) таблиц символов, а этим код поинтам соответствуют изображения символов. Наиболее вероятно, что одному и тому же изображению символа поставлены в соответствие множество код поинтов из множества таблиц символов (charsets). Алгоритм, наверное, такой:
1) Определяем таблицу символов (charset) - Unicode, ANSI и тп;
2) Определяем кодировку (encoding);
3) С помощью кодировки (encoding) переводим байты в кодпоинты таблицы символов (charset);
4) Отображаем для каждого кодпоинта соответствующее изображение буквы из данной кодовой таблицы (charset).

UPD: Догадка оказалась верной http://www.w3.org/International/questions/qa-what-is-encoding.en#fonts правда обычно один шрифт покрывает одну кодовую таблицу, ну а в случае Юникода, где символов просто дохрена, — его подмножество.
6:17 pm
кодировки и перл

Похоже, я начинаю догонять, как обращаться с кодировками в перле. Я изучаю перл (с переменным успехом) с 2011 года. Всё, что я до сих пор знал о кодировках — это то, что, если с ними что-то пойдёт не так, то на выходе я получу киргуду (впрочем, и на входе тоже). Хоть я и писал

use utf8;
(чтобы у меня работали регулярные выражения на русском языке), и
binmode STDOUT, ':encoding(UTF-8)';
(чтобы не получать ошибку 'Wide character in use' всякий раз выводя текст в консоль), я не очень понимал, что делаю. А вот сейчас, похоже, понял.


Данные, которыми оперирует перл, — это набор байтов. Перл понятия не имеет, чем этот набор является по сути — какими-то бинарными данными, полученными, например, при считывании картинки в переменную, набором символов или еще чем-нибудь.


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


Чтобы перл воспринял набор непонятных байтов как логические символы, необходимо перевести их во внутренний формат перла, то есть декодировать из той кодировки, в которой они были, во внутреннее представление перла. Для этого существует функция encode из модуля Encode. И наоборот, для передачи данных вовне необходимо перевести символы из внутреннего представления перла в ту или иную кодировку, воспользовавшись функцией decode того же модуля.


Дальше можно не читать, так как я там строю догадки


Так как я до сих пор понимаю тему слабо, то постараюсь изложить свое текущее представление. Оно может быть неверно, ну и хер с ним: разберусь позднее


Начну с того, что существуют кодовые таблицы (charsets) такие как Юникод, АНСИ и тп и способы представления этих таблиц в компьютере (маппинги?), которые называются кодировками (encodings). Мне надо понять, как кодовые таблицы связаны с кодировками. Похоже, что каждый символ в кодовой таблице имеет свой код. Этот код может быть представлен в виде числа. Число занимает какое-то количество байт памяти. Чем больше число, тем больше байт нужно для его хранения. С помощью одного байта можно предствить ограниченное количество чисел. Байт это 8 бит. Бит - ячейка байта, которая может содержать 1 или 0. У нас 8 ячеек. [][][][][][][][]. То есть у нас 28 = 128 вариантов заполнения всех ячеек. То есть при помощи одного байта можно представить 128 символов. Куда больше символов, чем букв и цифр в алфавите вроде русского или английского. А что если нам нужно писать по-китайски, где символов куда больше 128? А что если нам требуется писать в одном тесте сразу на нескольких языках с разными символами? Тогда нам перестает хватать этих 128 символов, а значит и одного байта для их хранения. То есть тебуются кодировки, не имеющие ограничения вида один байт на кодировку символа. Допишу потом.

Вопрос. Вот у нас есть кодировка, и с помощью нее мы представили число, которое соответствует тому или иному коду в таблице символов (charset). Как этот код становится буквой на экране? Значит существует маппинг кода из таблицы в символ на экране? А из какой таблицы компьютер берет этот код? Из Юникода? Я нихуя не понимаю.

Friday, May 9th, 2014
12:22 am
test
Testing embedded tweets

Monday, March 18th, 2013
12:43 am
Толчки в самолетах
Всякий раз, когда я захожу в туалет в самолете, то вижу гору бумаги в толчке (особенно на длительных рейсах), хотя куча пиктограмм и надписей просит ничего туда не выкидывать. Интересно, это просьбы незаметны или сложно догадаться до такого действия:
bin
или чисто машинально получается?
Friday, December 21st, 2012
12:13 am
Конец света.
Нас наебали, расходимся.
Thursday, November 2nd, 2006
1:26 am
В предыдущем посте я таки напиздел :)
Wednesday, July 26th, 2006
2:28 pm
Бля и писать буду иногда, а хули :)
Tuesday, May 9th, 2006
2:19 pm
превед!
Ну все ясно короче :) ЖЖ не веду, только коментирую че-та.
About LiveJournal.com