Shoorick ([info]shoorick) wrote,
  • Mood: солнце ещё высоко

Преобразование «ёлочек»

Пытался преобразовать текст на UTF-8: хотел привести отсутствующую в КОИ-8 пунктуацию к виду, пригодному для HTML:
use HTML::Entities;
...
my $fixed  = encode_entities( $raw, "\x{460}-\x{2E2E}" );
Работало странно: тире преобразовывалось в —, а кавычки-ёлочки — нет. Причина оказалась простой — кавычки-ёлочки в юникоде находятся совсем не там, где остальные знаки пунктуации с пробелами — не в U+2000–U+205F, а гораздо ближе — их коды U+00AB и U+00BB, то есть, если перевести в десятичную систему счисления, 171 и 187. Ничего не напоминает? :-)

Поэтому более правильный вариант выглядит так:
my $fixed  = encode_entities( $raw, "\x{A0}-\x{40F}\x{460}-\x{2E2E}" );
Tags: keyboard, perl, unicode, windows, программизм

  • Post a new comment

    Error

    Your IP address will be recorded 

  • 3 comments

[info]vazhnov

November 25 2011, 17:45:00 UTC 6 months ago

Почему бы везде не использовать уникод?

[info]shoorick

November 25 2011, 18:37:07 UTC 6 months ago

Re: Юникод

Потому что на некоторые сайты настолько древние, что переводить их на
юникод весьма напряжно. Поэтому на время создания новой, юникодной
версии, приходится изобретать костыли.

[info]kohb

November 29 2011, 02:51:16 UTC 5 months ago

ну, «ёлочки» - оригинально французские, и попали в 819 страницу, она же latin1, она же 8859-1, и даже m$ не посмела их затереть в своей western-1252, а, поскольку 8859-1 стала базовой для всех юникодов, они остались в ней в перво.
немецким „лапкам“ повезло меньше — они не попали даже в первое расширение ASCII (U+0080-U+07FF), оставшись с прочим редкоиспользуемым хламом — U+201E и U+201C.

Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…