LINUX.ORG.RU

UTF-8 upper/lower


0

0

Интересует такой вопрос: при смене регистра букв в UTF-строке сохраняется ли такая же длина?

Например:
"аБв" - длина строки в байтах равна 6
"абв" - длина строки в байтах равна 6
"АБВ" - длина строки в байтах равна 6

С русским диапазоном понятно, всё гуд - на каждую букву по два байта. А как с другими диапазонами (японский, арабский и т.д.)?

★★★★★

Гм. upper/lower на японском или арабском - это сильно. Ещё иврит или грузинский до кучи вспомни :D

...

Все эти языки не имеют понятия прописных и строчных букв.

KRoN73 ★★★★★
()

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

anonymfus ★★★★
()

хер её знает, я бы тест написал. Проблемы могут быть только для двух алфавитов у которых есть символы с кодом 256 и 65536(ибо всего реально заюзано около 100тыщ символов). Но, судя по chr(256) и chr(65536) ничего страшного нет.

true_admin ★★★★★
()

не обязательно (имхо). в некоторых языках преобразование регистра буквы может вести к изменению кол-ва символов (до 3-х максимум, насколько я помню). Например, в немецком, 'ß' при преобразовании в нижний регистр, будет заменена на 'ss'

ott ★★★★★
()
Ответ на: комментарий от anonymfus

> Даже если и сохраняется, то не обязано сохраняться и впредь для вносимых в будущем символов.

Собственно, мне и нужна информация о том, оно "узаконено" по ширине, или это "совпадение".

Прописные/строчные в японском/арабском - Крон, не суди строго, я не в курсах, как там. Привёл в качестве экзотики пример (типа, длина символа в языковом диапазоне может быть больше двух байт, да и сам диапазон может содержать нефиксированное количество байт на символ).

Slavaz ★★★★★
() автор топика
Ответ на: комментарий от Slavaz

>Прописные/строчные в японском/арабском - Крон, не суди строго, я не в курсах, как там.

Короче, я кроме латиницы, кириллицы и греческого алфавита навскидку не назову больше алфавитов, имеющих различное написание прописных и строчных букв :)

Если смотреть не по числу пользователей алфавитов, а по числу самих алфавитов, то большинство из них, ИМХО, неизменяемые.

KRoN73 ★★★★★
()
Ответ на: комментарий от Slavaz

Но зато одна и та же буква в общем случае может писаться разным числом байт. Скажем, Ё может быть отдельной буквой, а может Е с модификатором.

KRoN73 ★★★★★
()
Ответ на: комментарий от Slavaz

"Длина" символа, а точнее количество кодовых единиц зависит от способа кодирования. Всего в unicode (на сегодня) выделен диапазон от 0x000000 до 0x10FFFF. В зависимости от способа кодирования кодовых точек диапазона, количество кодовых едениц, в которые отображается кодовая точка может быть различным (например всегда 2, всегда 3, переменным от 1 до 2-х, переменным от 1-го до 3-х и т.д. насколько хватит фантазии изобретателя метода кодирования). Если рассматривать UTF-16, то примерно это выглядит так: для всех символов из ASCII всегда задействована одна кодовая единица, для остальных всегда две. Для UTF-8 это не так, кодовые точки могут быть представлены последовательностью от 1 до 4 кодовых единиц (т.е. от 1 до 4-х байт), а в теории до 6-ти байт. Поэтому, в общем случае, никакой гарантии, что при преобразовании регистра кол-во кодовых единиц (коло-во байт) сохранится _нет_. В этом плане надо смотреть на UTF-16 или UCS-2 там гарантировано получается либо всегда 1 либо всегда 2 байта (конечно есть и исключения в виде упомянутого немецкого "SS").

cathode
()
Ответ на: комментарий от cathode

Понято. Спасибо за развёрнутый ответ.

Slavaz ★★★★★
() автор топика
Ответ на: комментарий от ott

>немцы уже начинают часто писать ss вместо ß

Уже начинают назад :) Было поветрие перехода на «ss», когда были проблемы с кодировками на заре компьютеров. Сегодня это уже неактуально.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

>> Было поветрие перехода на «ss», когда были проблемы с кодировками на заре компьютеров.

Schutzstaffel ? А заря компьютеров = энигма? :)))

cathode
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.