«Unicode. Ликбез»

1,096 views

Published on

- что каждый разработчик должен знать о Unicode
- базовые понятия
- «как начать использовать антибиотики вместо пиявок и кровопусканий» ©Joel

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,096
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

«Unicode. Ликбез»

  1. 1. «Unicode. Ликбез»
  2. 2. Ликбе́з (ликвида́ция безгра́мотности)В переносном смысле —обучение неподготовленнойаудитории базовым понятиямкакой-либо науки, процессаили явления.
  3. 3. Упрощенец – тот, ктоповерхностно, не вникая всуть, подходит к решениюсложных задач, вопросов.
  4. 4. Часть 1 Задачка, в процессе решения которой, автор пришел к пониманию своего невежества
  5. 5. найти в словеÎñţérñåţîöñåļîžåţîöñ подстроку Nation
  6. 6. http://stackoverflow.com/questions/7429964/how-to-match-string-with-diacritic-in-modern-perl/7440789#7440789
  7. 7. Решение №1use 5.014;use utf8;use Unicode::Normalize;binmode STDOUT, :encoding(UTF-8);my $str = "Îñţérñåţîöñåļîžåţîöñ";my $look = "Nation";say "before: $strn";$str = NFD($str);$str =~ s/pM//og; # remove "marks"say "after: $str";say "is_match: ", $str =~ /$look/i || 0;
  8. 8. tchrist:«This is the wrong way to do it. Youneed to use a UCA match at level 1»
  9. 9. Решение №2use 5.014;use utf8;use Unicode::Collate;my $str = "Îñţérñåţîöñåļîžåţîöñ";my $look = "Nation";my $Collator = Unicode::Collate->new( normalization => undef, level => 1);my @match = $Collator->match($str, $look);say “matches: ” . join(“, “, @match);
  10. 10. «Code that assumes youcan remove diacritics to get at base ASCII letters is evil,still, broken, brain-damaged, wrong, and justification for capital punishment»
  11. 11. ?
  12. 12. Часть 2 Ликбез
  13. 13.  Unicode – это некодировка или таблицасимволов. Это стандарт! Вкоторый входит, крометаблиц символов и правилих кодирования, ещемного-много всего
  14. 14. Стандарт Unicodeтаблицы символов, несколько механизмов кодированияформы нормализации текстаправила casemapping, casefoldingгибкие правила collationправила переносов для слов и разбиения строкспециальные правила для регулярных выраженийтысячи именованых свойств (properties)численные эквивалентности (U+216B XII)направление текста.... много всего другого ....
  15. 15. TLA (ТБС)UCSUTFBMPBOMUCANFC, NFDICU
  16. 16. UCS (ucs-2, ucs-4)универсальный набор символов(англ. UCS, universal character set) задаёт однозначное соответствиесимволов кодам — элементамкодового пространства,представляющим неотрицательныецелые числа.определен в стандарте ISO/IEC10646 (включен в стандарт Unicode)
  17. 17. UCS, продолжение...запись Unicode символов вида: U+0075пример:u (U+0075 ʟᴀᴛɪɴ sᴍᴀʟʟ ʟᴇᴛᴛᴇʀ ᴜ) + ¨(U+0308ᴄᴏᴍʙɪɴɪɴɢ ᴅɪᴀᴇʀᴇsɪs) => ümac: unicode hex input (l&t), option + codewindows: alt + “+” + codewww.fileformat.info/info/unicode/char/search.htm .../search.htm?q=diacritic&preview=entity
  18. 18. Кодовое пространство (codespace) вUnicode разбито на 17 плоскостей по 2^16(65536) code points (кодовых точек)набор всех code points: 0hex to 10FFFFhexНулевая плоскость называетсяBasic Multilingual Plane (BMP)в ней расположены символы наиболееупотребительных письменностей. Т.е. это все что в диапазоне 0x0 - 0xFFFF (невсе используются, верхняя часть диапазоназарезервирована)
  19. 19. Unicode transformation format UTF-16BE, UTF-16LE UTF-32BE, UTF-32LE UTF-8, UTF-EBCDICBE (big-endian) – от старшего к младшемуLE (little-endian) – от младшего к старшемуесли нет BOM (о нем ниже) то стандартомпредписывается  BE (тупоконечный)
  20. 20. BOMbyte order markВажен для UTF-16 и UTF-32. (дляопределения тупо/остро-конечности)Для UTF-8 обычно не нужео, ноесть в стандарте и частоиспользуется в Windows. UTF-16,32программы по BOM могут понять(если захотят), что в файле utf-8.
  21. 21. UTF-16включает в себя UCS-2, какподмножествоособенность кодировки, чтосимволы не из 0-й plane  задаютсясоставными кодами 16+16=32 битаили суррогатными парами
  22. 22. UTF-32 фиксированной ширины, всегда 4 байта,UTF-32/UCS-4 requires four bytes to encodeany character. http://en.wikipedia.org/wiki/UTF-32/UCS-4
  23. 23. UTF-8Unix/Web кодировка2/09/1992 К. Томпсон & Р. ПайкASCII-совместима, 1–6 байт (4)BOM – не нужен!UTF-EBCDIC – редкая экзотикадля мейнфреймов
  24. 24. charactersymbolgraphemeglypthletterdiacritical markideogram
  25. 25. Композиция символов –cимволы задающиеся несколькими кодами.Для некоторых символов есть каккомпозитные так и монолитные формы записиЁ (U+0401) и Й (U+0419), Е +  ̈ (U+0415 U+0308)И +  ̆ (U+0418 U+0306)Character General Category –каждый code point относится к одной изосновных категорий.Буква, знак (см диакр. знаки), число(number),пунктуационный знак, символ, разделитель(см. http://www.unicode.org/versions/Unicode6.0.0/ch02.pdf)
  26. 26. Нормализация –Поскольку одни и те же символы можнопредставить различными кодами, что иногдазатрудняет обработку, существуют процессынормализации, предназначенные дляприведения текста к определённомустандартному виду.Case folding – приведение символа илистроки к заданному регистру (м. б. 1–3)Collation (UCA)алгоритм сравнения двух строк, с учетомособенностей Unicode
  27. 27. ICUInternational Components forUnicode набор C-библиотек дляразработки программ споддержкой UnicodeДля Python есть pyICUв Perl5 не используется!
  28. 28.
  29. 29. Часть 3 Домашняя работа
  30. 30. Зачем учить?
  31. 31. «Все-таки UTF8 в перле - этонемного черная магия» Alex Povolotsky, рассылка Moscow.pm
  32. 32. Как учить?
  33. 33. презентации tchrist (OSCON 2011)утилиты tchristhttp://stackoverflow.com/questions/6162484/why-does-modern-perl-avoid-utf-8-by-default/6163129#6163129 http://local.joelonsoftware.com/wiki/Абсолютный_Минимум,_который_Каждый_Разработчик_Программного_Обеспечения_Обязательно_Должен_Знать_о_Unicode_и_Наборах_Символовhttp://ru.wikipedia.org/wiki/Юникодhttp://perldoc.perl.org/search.html?q=perluni
  34. 34. Еще ссылкиhttp://shapecatcher.com/http://unicode.org/resources/online-tools.html (http://unicodinator.com/)http://event.perlrussia.org/saintperl3/talk/158training.perl.com ☠☠☠
  35. 35. «возможно, я не смог раскрытьвсё, что надо знать о кодировках символов и Unicode, но я надеюсь, что если вы не уснули до этого места, вы уже знаетедостаточно, чтобы возвратиться к программированию и использовать антибиотикивместо пиявок и кровопусканий»
  36. 36. как стать экспертом по работе с кодировками«Encoding is for i/o; in the Perl space, text must bePerl character strings.I repeat: Encoding is for i/o; in the Perl space, textmust be Perl character strings.Write that 100 times, display it next to yourmonitor(s), record it and play it whilst sleeping onyour ipod for one week, have it tattooed on yourfingers, and in no time youll be known as theencoding guru in your company»http://sigstp.blogspot.com/

×