On Tue, 15 Dec 1998, Alex Tutubalin wrote:
> alr> и даже не наибольшее общее подмножество по всем используемым кодировкам,
> alr> а только русские буквы.
> Это - неконстpуктивная кpитика. С благодаpностью пpиму констpуктивную. Т.е.
> сами таблицы.
Вот и конструктивная критика
a) таблицы
б) скрипт который их генерит из описаний charset на ftp.unicode.org.
(koi8 там нет, но она есть на страничке у Чернова в том же формате
и у меня на http://www.ice.ru/~vitus/catdoc/ver-0.9.html)
> Сделано не так. Те символы, котоpых нет в таблице оставляются as is.
Это правильно, но если мы логику замены неизвестных символов загоним
в таблицу, возможны проблемы с автоматической генерацией таблицы обратной
кодировки. Что тут делать - не знаю. В тех таблицах которые нагенерил
я, неизвестные символы заменяются на пробел. Как будет себя вести apache
в этих случаях - не знаю. Можно, конечно, задать все таблицы (прямые и
обратные) явно (благо места занимают немного, и нагенерить их легко).
Но, по-моему более правильным подходом было бы встраивание в Apache
логики, которая позволила бы в таблицах помечать некоторые символы
как отсутствующие в другой кодировке (например с помощью 0 в
противоположной колонке)
Т.е
0 9A
не перекодировать в <- этом направлении
A0 0
Aне перекодировать в ->
>
>
> С уважением,Alex Tutubalin
>
> --- GoldED 2.42.G1114+
>
>
--------------------------------------------------
Victor Wagner vitus@ice.ru
Programmer Office:7-(095)-964-0380
Institute for Commerce Home: 7-(095)-135-46-61
Engineering http://www.ice.ru/~vitus
#!/usr/bin/perl
# Скрипт, который делает таблицы перекодировки для Апача.
# Аргументы - исходный charset, выходной charset. Таблица выдается на
# stdout. Возможные опции командной строки -L директория с таблицами
# -u символ для замены не найденных символов (по умолчанию " ");
# Таблицы для всех кодировок кроме koi8 берутся с ftp.unicode.org,
# для koi8 с черновской страницы. Предполагается что они у вас уже
# установленны как часть дистрибутива catdoc-0.90
use Getopt::Std;
use strict;
use vars qw($opt_L $opt_u);
getopts("L:");
$opt_L||="/usr/local/lib/catdoc";
$opt_u||=" ";
my($unknown)=sprintf ("0x%X",ord(" "));
my($source_name,$dest_name)=@ARGV;
$source_name= $1 if $source_name =~/(.+?)\.txt$/;
$dest_name= $1 if $dest_name =~/(.+?)\.txt$/;
die "No such file: $opt_L/$source_name.txt"
unless (-f "$opt_L/$source_name.txt");
die "No such file: $opt_L/$dest_name.txt"
unless (-f "$opt_L/$dest_name.txt");
open F,"$opt_L/$dest_name.txt";
my(%outtab);
while (<F>) {
next if /^\s*#/||/^\s*$/;
if (/(0x[0-9A-F]+)\s+(0x[0-9A-F]+)/i) {
$outtab{hex($2)}=$1;
}
}
close F;
print "# Recoding table from $source_name to $dest_name\n";
print "# produced by mktable script (c) Victor B. Wagner,1998\n";
open F,"$opt_L/$source_name.txt";
while (<F>) {
next if /^\s*#/||/^\s*$/;
if (/(0x[0-9A-F]+)\s+(0x[0-9A-F]+)/i) {
my($unicode)=hex($2);
my($charcode)=$1;
next if (hex($charcode)<32||hex($charcode)==127);
if (defined $outtab{$unicode}) {
if (uc($outtab{$unicode}) ne uc($charcode)) {
print "$charcode $outtab{$unicode}\n";
}
} else {
print "$charcode $unknown\n";
}
}
}
close F;
"Russian Apache" includes software developed
by the Apache Group for use in the Apache HTTP server project
(http://www.apache.org/) See
Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C)
1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.