Це команда enc2xs, яку можна запустити в постачальнику безкоштовного хостингу OnWorks за допомогою однієї з наших численних безкоштовних робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн емулятор Windows або онлайн емулятор MAC OS
ПРОГРАМА:
ІМ'Я
enc2xs -- Генератор модулів кодування Perl
СИНТАКСИС
enc2xs -[параметри]
enc2xs -M Файли карти ModName...
enc2xs -C
ОПИС
enc2xs створює розширення Perl для використання Encode з будь-якого зіставлення символів Unicode
файли (.ucm) або файли кодування Tcl (.enc). Крім того, що використовується для внутрішнього використання під час побудови
процесу модуля Encode, ви можете використовувати enc2xs щоб додати власне кодування до perl. Немає
знання XS необхідні.
Швидко керівництво
Якщо ви хочете знати якомога менше про Perl, але вам потрібно додати нове кодування, просто
прочитайте цей розділ і забудьте решту.
0. Підготуйте файл .ucm. Ви можете отримати його звідкись або написати власний
scratch або ви можете взяти його з дистрибутива Encode і налаштувати його. Для
Формат UCM, див. наступний розділ. У наведеному нижче прикладі я буду називати свій теоретичний
кодування myascii, визначені в my.ucm. "$" - це підказка оболонки.
$ls -F
my.ucm
1. Видати команду таким чином;
$ enc2xs -M Мій my.ucm
створення Makefile.PL
створення My.pm
створення README
створення Змін
Тепер подивіться на свій поточний каталог. Це має виглядати так.
$ls -F
Makefile.PL My.pm my.ucm t/
Були створені такі файли.
Makefile.PL - скрипт MakeMaker
My.pm - Підмодуль кодування
t/My.t - тестовий файл
1.1.
Якщо ви хочете встановити *.ucm разом з модулями, зробіть наступне;
$ mkdir Кодування
$ mv *.ucm Кодувати
$ enc2xs -M Моє кодування/*ucm
2. Відредагуйте створені файли. Вам не потрібно, якщо у вас немає часу І наміру
віддати комусь іншому. Але це гарна ідея відредагувати модуль і додати більше тестів.
3. Тепер видайте команду, яку люблять усі виробники Perl:
$ perl Makefile.PL
Написання Makefile для Encode::My
4. Тепер все, що вам потрібно зробити, це зробити.
$ марка
cp My.pm blib/lib/Encode/My.pm
/usr/local/bin/perl /usr/local/bin/enc2xs -Q -O \
-o encode_t.c -f encode_t.fnm
Читання myascii (myascii)
Написання складеної форми
128 байт у таблицях рядків
384 байти (75%) збережено виявлення дублікатів
1 байт (0.775%) збережено за допомогою підрядків
....
chmod 644 blib/arch/auto/Encode/My/My.bs
$
Час, який займає, залежить від того, наскільки швидко працює ваша машина та наскільки вона велика
кодування є. Якщо ви не працюєте над чимось великим, таким як euc-tw, це теж не знадобиться
довго.
5. Ви вже можете "зробити інсталяцію", але спочатку потрібно протестувати.
$ зробити тест
PERL_DL_NONLAZY=1 /usr/local/bin/perl -Iblib/arch -Iblib/lib \
-e 'використовувати Test::Harness qw(&runtests $verbose); \
$verbose=0; runtests @ARGV;' т/*.т
t/My.... ok
Всі тести успішні.
Файли=1, тести=2, 0 сек
(0.09 cusr + 0.01 csys = 0.09 ЦП)
6. Якщо ви задоволені результатом тесту, просто «здійсніть встановлення»
7. Якщо ви хочете додати своє кодування до списку завантаження запиту Encode (тобто вам не потрібно
"use Encode::YourEncoding"), запустіть
enc2xs -C
щоб оновити модуль Encode::ConfigLocal, який керує локальними налаштуваннями. Після того,
"використовувати кодування;" достатньо, щоб завантажити кодування на вимогу.
Команда Unicode Характер карта
Encode використовує формат Unicode Character Map (UCM) для зіставлення вихідних символів. Це
формат використовується пакетом ICU IBM і був прийнятий Ніком Інг-Сіммонсом для використання з
Модуль кодування. Оскільки UCM є більш гнучким, ніж карта кодування Tcl, і набагато більше користувачів
дружній, зараз це рекомендований формат для кодування.
Файл UCM виглядає так.
#
# Коментарі
#
"US-ascii" # Обов'язковий
"ascii" # Необов'язково
1 # обов'язковий; зазвичай 1
1 # Макс. Кількість байтів/символ
\x3F # Символ підстановки
#
ЧАРОВА
\x0000 |00 #
\x0001 |01 #
\x0002 |02 #
....
\x007C |7 # ВЕРТИКАЛЬНА ЛІНІЯ
\x007D |7 # ПРАВА ФУГУРНА ДУЖКА
\x007E |7 # ТИЛЬДА
\x007F |7 #
КІНЕЦЬ CHARMAP
· Все, що стоїть після «#», розглядається як коментар.
· Розділ заголовка продовжується до тих пір, поки не з’явиться рядок зі словом CHARMAP. Цей розділ
має форму значення, одна пара на рядок. Рядки, які використовуються як значення, мають бути
цитується. Голі слова розглядаються як числа. \xXX представляє байт.
Більшість ключових слів зрозумілі самі за собою. subchar означає символ заміни, не
підсимвол. Коли ви декодуєте послідовність Unicode до цього кодування, але немає відповідності
Знайдено символ, буде використана послідовність байтів, визначена тут. У більшості випадків
значення тут \x3F; в ASCII це знак питання.
· CHARMAP запускає розділ карти символів. Кожен рядок має наступну форму:
\xXX.. |0 # коментар
^ ^ ^
| | +- Запасний прапор
| +-------- Закодована послідовність байтів
+-------------- Ідентифікатор символу Unicode у шістнадцятковій формі
Формат приблизно такий же, як і розділ заголовка, за винятком резервного прапорця: |
потім 0..3. Значення можливих значень таке:
|0 Безпечна поїздка в обидва боки. Символ, декодований у Unicode, кодується назад у той самий байт
послідовність. Більшість персонажів мають цей прапор.
|1 Запасний варіант для Unicode -> кодування. Коли його бачать, enc2xs додає цей символ для
тільки кодувати карту.
|2 Пропустити відображення підсимволів, якщо не буде кодової точки.
|3 Запасний варіант для кодування -> Unicode. Коли його бачать, enc2xs додає цей символ для
лише декодувати карту.
· І, нарешті, END OF CHARMAP закінчує розділ.
Коли ви створюєте файл UCM вручну, скопіюйте файл ascii.ucm або наявний
кодування, близьке до вашого, а не писати власне з нуля.
Коли ви це зробите, переконайтеся, що ви принаймні пішли U0000 до U0020 як є, якщо не ваше оточення
є EBCDIC.
КЕВЕЙТ: не всі функції в UCM реалізовані. Наприклад, icu:state не використовується.
Через це вам потрібно написати модуль perl, якщо ви хочете підтримувати алгоритмічні
кодування, зокрема серії ISO-2022. Такі модулі включають Encode::JP::2022_JP,
Encode::KR::2022_KR і Encode::TW::HZ.
Справлятися з дублювати відображення
Коли ви створюєте карту, ви ПОВИННІ зробити ваші картографії безпечними в обидва боки. Тобто,
"encode('your-encoding', decode('your-encoding', $data)) eq $data" означає всі
символи, позначені як "|0". Ось як переконатися:
· Сортуйте свою карту в порядку Unicode.
· Якщо у вас є дублікат запису, позначте його '|1' або '|3'.
· І переконайтеся, що запис '|1' або '|3' ВІДПОВІДАЄ за записом '|0'.
Ось приклад з big5-eten.
\xF2550\xF9 |9
\xA2550\xA2 |4
Внутрішнє кодування -> Юнікод і Юнікод -> Карта кодування виглядає так;
E до UU до E
--------------------------------------
\xF9\xF9 => U2550 U2550 => \xF9\xF9
\xA2\xA4 => U2550
Таким чином, для \xF9\xF9 безпечно туди й назад. Але якщо лінія вище перевернута, ось що
трапляється.
E до UU до E
--------------------------------------
\xA2\xA4 => U2550 U2550 => \xF9\xF9
(\xF9\xF9 => U2550 тепер перезаписано!)
Пакет Encode поставляється з ucmlint, груба, але достатня утиліта для перевірки
цілісність файлу UCM. Перевірте це в каталозі Encode/bin.
Якщо сумніваєтеся, можете скористатися ucmsort, ще одна утиліта в каталозі Encode/bin.
закладки
· Домашня сторінка ICUhttp://www.icu-project.org/>
· Таблиці зіставлення символів ICUhttp://site.icu-project.org/charts/charset>
· ICU: дані про перетворенняhttp://www.icu-project.org/userguide/conversion-data.html>
Використовуйте enc2xs онлайн за допомогою служб onworks.net