Pull to refresh

Comments 18

>Случилось мне задание: проверить, есть ли XML-имя правильным.
>Опять-таки, как обычно, резолюция Microsoft — Won't fix.
>Этот способ не очень универсален, и задавать ним более узкие будет ужасно неудобно, мне он показался красивым, и поэтому я решил им поделится.

Смутило.
Brain translate, т. к. русский язык мне не родной… Хотя мне всегда казалось, что владею не хуже многих носителей :)
p.s. Последняя строчка — было пропущено смыслообразующее слово, в таком виде она меня тоже смущает :) Уже исправлено.

А что не так (с точки зрения native speaker) с первыми двумя? Подозреваю, что форма «случилось мне...» может выглядеть несколько архаической, но все же и лексически, и синтаксически правильной, а «резолюция» обычно не употребляется в таком контексте.

Я прав?
>Подозреваю, что форма «случилось мне...» может выглядеть несколько архаической, но все же и лексически, и синтаксически правильной

Да, и это тоже. Хотя во второй части предложения тоже имеется шероховатость. Я бы выразил мысль так: «Мне понадобилось проверить, является ли XML-имя правильным».

>«резолюция» обычно не употребляется в таком контексте.

Именно. в этом контексте, скажем, «вердикт» звучал бы лучше чем «резолюция».

>… и задавать ним более узкие диапазоны символов будет ужасно неудобно, мне он показался красивым,…
Я бы написал "… и задавать с его помощью более узкие диапазоны символов будет ужасно неудобно, но мне он показался красивым, ..."

Впрочем русский и для меня, по идее, не основной язык из используемых в повседневном обиходе, так что и я могу в чём-то ошибаться :)
Просто обычный программист =)
UFO just landed and posted this here
Наверное, вы подумали, что я автор заметки. Но, увы…
Если задание заключалось только в проверке XML на валидность, эта адская регулярка — не лучший способ достичь желаемого. Используя встроенные средства .NET, типа XmlDocument или XmlReader, можно было бы написать куда более читаемый и понятный код, который бы едва ли работал медленнее, зато поддерживать его было бы куда проще.
Эта регулярка — часть большей задачи, где .Net-овские классы по ряду причин неприменимы. Проверка валидности имен — просто самое простое применение, использованное здесь в качестве понятной и наглядной иллюстрации.
автор явно думал что UTF-16 это тоже самое что UCS-2, а, оно, внезапно, оказалось не так…
На момент возникновения проблемы автор (в смысле я:)) даже не подозревал о существовании UCS-2, о чем (хотя и не прямым текстом) сознаюсь в этой заметке :)
Еще одно подтверждение что решение MS использовать UTF16 было неправильным. Если уж в самом фреймворке косяки, страшно представить что в аду энтерпрайза.
Решение это было принято при разработке Windows NT еще до юникода 2-ой версии (96 год). Тогда было только 65535 кодовых точек. Потом юникод расширился, а апи-то новое уже написано. Что, еще раз переписывать? Так и осталось.

Но да, проблем с этим много. В том числе в моем любимом C++: широкие строкb (wstring) по стандарту гарантируют, что 1 ячейка — 1 символ. В этом их преимущество над обычными строками. В gcc все хорошо, там UTF-32/UCS-4. Жутко застратно по памяти, зато все строго и хорошо. Майкрософт понимали, что C++ должен быть быстрым, а значит, нужно использовать готовые API фукнции. А значит использовать «API-шный» юникод — UTF-16. В итоге да, это все тянется и тянется.

Впрочем, если быть недостаточно строгим и знать, что код 100% не будет использоваться в азии, можно и забить и считать, что в UTF-16 отсутствуют суррогаты. Так многие долгое время и делали (изярких примеров: адресная строка оперы и виндовый блокнот). И ничего, раболо же, пусть и в ущерб китайцам.
есть юникодные символы, которые не помещаются и в 4 байта. Например, «д́», «у́». То, что 32 бита на символ решают все проблемы с юникодом — это миф.
UFO just landed and posted this here
Sign up to leave a comment.

Articles

Change theme settings