Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: serialize/unserialize и UTF-8 [2]
Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011
Помог: 8 раз(а)
интересный факт: кодировка ебсдик используемая на майнфреймах не совпадает с ascii вообще никак, так что счастье, что коды английский символов совпадают во всех кодировках только кажущееся.
caballero
Отправлено: 09 Ноября, 2011 - 13:50:11
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
но для меня было новостью что в utf-8
кирилица занимает в 2 раза больше чем для латиницы
и почему тогда не так же в win-1251?!
если вы явно указываете кодировку файла то на символ идет 1 байт
смысл юникода хранить данные разных языков в одном файле или строке
но байта на всех не хватит, поэтому нелатинские символы хранятся в двух и более байтах
Цитата:
Не слышал такого, хотелось бы пруфов именно для php.
значит не программируeте на СИ и тип wchar_t вам не знаком. А PHP на писан именно на нем.
The Microsoft Windows application programming interfaces Win32 and Win64, as well as the Java and .Net Framework platforms, require that wide character variables be defined as 16-bit values, and that characters be encoded using UTF-16 (due to former use of UCS-2), while modern Unix-like systems generally require 32-bit values encoded using UTF-32.
Цитата:
The ISO/IEC C programming language, which generally uses the datatype wchar_t for wide characters, originally defined that wide characters should be 16-bit values under C90 due to historical compatibility reasons. C and C++ compilers that comply with the 10646-1:2000 Unicode standard generally assume 32-bit values.
Ну и так далее. В общем,
Цитата:
The width of wchar_t is compiler-specific
----- PostgreSQL DBA
caballero
Отправлено: 09 Ноября, 2011 - 14:37:46
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
А вот и не по два.
в некоторых компиляторах и платформах может быть 4
Покинул форум
Сообщений всего: 495
Дата рег-ции: Окт. 2011
Помог: 8 раз(а)
Удовлетворительный ответ о представлении символов в пхп так и не получен.
Аргументы про явы и сишарпы вообще не аргументы
caballero
Отправлено: 09 Ноября, 2011 - 16:16:51
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
представление символдов в PHP - забота разработчиков PHP
Остальным предлагаются функции работы со строками. В частности mb_ функции если речь идет о кодировках
Но я считаю что пхп хранит строки одно байтовыми символами, т.к. к строкам возможно обращение как к массиву. В простейшей реализации навигация по такому массиву была бы по символам, а не по байтам. Да, можно кастануть к чар*, но тогда бы появились дыры, т.к. только один байт из двух (четырёх) содержал бы значения, а оставшиеся были пустые. Третий вариант, что они делают умное итерирование по строке пропуская все пустые байты, я отбрасываю как бредовый.
caballero
Отправлено: 09 Ноября, 2011 - 17:09:23
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Значит используют "широкие" символы в mb_ функциях а в остальных используют обычные char
Цитата:
В простейшей реализации навигация по такому массиву была бы по символам,
обычно так и делаю при работе со строками
если нужно пройтись по строке то понятно что по символам а не по байтам
Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010 Откуда: Украина, Запорожье
Помог: 62 раз(а)
DlTA пишет:
но для меня было новостью что в utf-8
кирилица занимает в 2 раза больше чем для латиницы
и почему тогда не так же в win-1251?!
2 это не предел для utf. Один символ может занимать от 1 до 4 байт... Латиница - один, на кирилицу - по два байта, а вот если забить иероглиф какой-то, то может быть три или даже четыре...
А вот 1251 - это однобайтовая кодировка, соответственно все по одному
----- Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.