Листинг 4.2. Перекодирование Web-страницы в кодировку UTF-8

Предыдущая23242526272829303132333435363738Следующая

require 'open-uri'

require 'iconv'

def get_web_page_as_utf8(url)

open(url) do |io|

source = io.read

type, *parameters = io.content_type_parse

# He перекодировать, если не (X)HTML

unless type =~ %r!^(?:text/html|application/xhtml+xml)$!

return source

end

# Сначала проверяем заголовки, присланные сервером:

if pair = parameters.assoc('charset')

encoding = pair.last

# Затем анализируем HTML:

elsif source =~ ?\]*?charset=([^\s'"]+)/i

encoding = $1

# Если не удалось определить, предполагаем кодировку по умолчанию,

# определенную в стандарте HTTP.

else

encoding = 'ISO-8859-1'

end

converter = Iconv.new('UTF-8//IGNORE', encoding)

return converter.iconv(source)

end

end

Это еще не все системные вопросы, связанные с преобразованием кодировок. Предположим, что в операционной системе, где установлен Ruby, определена локаль, отличная от UTF-8, или Ruby общается с ОС не в UTF-8 (так, например, обстоит дело в дистрибутиве для Win32). Тогда возникают дополнительные сложности.

Например, Windows поддерживает Unicode в именах файлов и на системном уровне работает исключительно в Unicode. Но в настоящее время Ruby взаимодействует с Windows при помощи устаревших кодовых страниц. Для англоязычного и большинства других западных изданий это страница 1252 (или WINDOWS-1252).

Внутри программы можно пользоваться и кодировкой UTF-8, но все имена файлов придется перевести в кодировку, заданную кодовой страницей. Iconv поможет это сделать, но важно не забывать, что кодовая страница позволяет описать только малое подмножество всех символов, имеющихся в Unicode.

Кроме того, это означает, что пока Ruby для Windows не может открывать файлы, имена которых нельзя описать с помощью кодовой страницы. Это ограничение не относится к Mac OS X, Linux и другим системам с локалью UTF-8.

Справочники сообщений

Ложбан не зависит от национальных особенностей. Его словарь был создан алгоритмически на основе шести наиболее распространенных в мире разговорных языков: китайского, хинди, английского, русского, испанского и арабского.

Nick Nicholas, John Cowan. What is Lojban?

Справочник сообщений — это набор сообщений на одном языке. Данное понятие неотъемлемо от концепции локализации (L10N). Идея в том, чтобы отделить языково-зависимые строки от остальной программы. Тогда для того, чтобы программа «заговорила» на другом языке, достаточно всего лишь подменить справочник.

«Наилучший» способ реализовать эту идею в Ruby — воспользоваться библиотекой Ruby-GetText-Package. Я буду называть ее просто gettext, поскольку именно так называется содержащий ее файл (не путайте с утилитой gettext!). Эту великолепную библиотеку написал Macao Муто (Masao Mutoh), он же очень помог при написании данного раздела.

Библиотека представляет собой реализацию на Ruby (не обертку) набора утилит gettext из проекта GNU (самый известный продукт в этой области). Ее официальный сайт находится по адресу http://gettext.rubyforge.org/, а утилиты GNU можно найти на сайте http://www.gnu.org/software/gettext/.


8239058273372782.html
8239075186172840.html

8239058273372782.html
8239075186172840.html
    PR.RU™