Несколько "ламерских" вопросов

 
RU Centuriones #30.07.2005 14:14
+
-
edit
 

Centuriones

опытный

Хотелось бы уточнить: правильно ли я понял, что если я решил какую-нибудь CMS перевести на utf-8, то необходимо увеличивать в два раза и размеры полей в соответствующих местах базы данных (т.е. где было, например varchar(32), ставить varchar(64)) где предполагается использование национальных символов?
(Это пока первый вопрос, остальные буду тут задавать "в процессе" :D )
Раньше были времена,
А теперь мгновения.
Раньше поднимался дух,
А теперь давление.
 
RU Dem_anywhere #01.08.2005 18:22
+
-
edit
 

Dem_anywhere

аксакал
★☆
Зависит от используемого языка.
Для английского 1:1, русский 1:2, а в общем случае и в три раза может быть - в utf-8 символ до 3х байтов
 
+
-
edit
 

Mishka

модератор
★★★
В принципе, может быть до шести, но пока используется до 4-х. Зайди на Unicode Consortium, там найди стандарт, версия 4, глава 3, стр. 77, таблица 3.5.

Table 3-5 specifies the bit distribution for the UTF-8 encoding form, showing the ranges of
Unicode scalar values corresponding to one-, two-, three-, and four-byte sequences. For a
discussion of the difference in the formulation of UTF-8 in ISO/IEC 10646, see Section C.3,
UCS Transformation Formats.
Table 3-5. UTF-8 Bit Distribution
Scalar Value1st Byte2nd Byte3rd Byte4th Byte
00000000 0xxxxxxx0xxxxxxx   
00000yyy yyxxxxxx110yyyyy10xxxxxx  
zzzzyyyy yyxxxxxx1110zzzz10yyyyyy10xxxxxx 
000uuuuu zzzzyyyy yyxxxxxx11110uuu10uuzzzz10yyyyyy10xxxxxx
 


А вообще-то, про UTF-8 можно прочитать и здесь — они, вроде, родоначальники. :D Хотя это последний документ, но по заголовку легко определить номер первого RFC. :P В этом документе объясняется и принципы дизайна UTF-8.
 
+
-
edit
 

Mishka

модератор
★★★
Знаешь, UTF-8 одна только одна из encoding scheme, но у нее есть преимущество — при кодировании нет нолей и все байты определены так, что легко определить, байт ли это начальный или байт продолжения. Поэтому, если в середине запутался, то пропускаешь байтики, у который первые два бита 10.

Поэтому, если СУБД не поддерживает специальные поля для unicode (скажем, Ingres имеет специальные поля nchar и nvarchar), то UTF-8 это самое то. Для безопасности надо увеличить в четыре раза. Но тут еще одна проблема — дело в том, что unicode сейчас стандартизирует формы для представления символов с диакритическими штучками (дело в том, что были введены символы с диакритикой, а потом еще добалены сами знаки диакритики и возможности их комбинации с любым символом — как более общий механизм, вот и выходит, что можно двояко символы представлять, но... для разрешения этого конфликта и ввели форму — некоторые правила того, насколько соответствует представление духу и стандарту юникода — сейчас все глифы надо писать как базовый символ плюс набор диакритики). Поэтому есть три длины для unicode — одна в байтах, другая в unicode символах (это уже зависит от encoding scheme) и третья — длина в glyph-ах (или показываемых символах). Про глифы — посмотри на тот же стандарт, глава два, стр 44, рисунок 2-17.
Multiple Combining Characters
In some instances, more than one diacritical mark is applied to a single base character (see Figure 2-17). The Unicode Standard does not restrict the number of combining characters that may follow a base character. The following discussion summarizes the default treatment of multiple combining characters. (For the formal algorithm, see Chapter 3, Conformance.)
Figure 2-17. Stacking Sequences
 

Прикреплённые файлы:
 
 
Это сообщение редактировалось 03.08.2005 в 08:49

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru