charset

Igor Sysoev is at rambler-co.ru
Sun Jul 10 12:38:01 MSD 2005


On Sun, 10 Jul 2005, Igor Sysoev wrote:

> On Sun, 10 Jul 2005, Andrey N. Oktyabrski wrote:
>
>> Igor Sysoev wrote:
>>> On Sun, 10 Jul 2005, Andrey N. Oktyabrski wrote:
>>> 
>>>> Igor Sysoev wrote:
>>>> 
>>>>> 
>>>>> На данный момент ngx_http_charset_module работает так:
>>>>> 
>>>>> 1) есть директива charset on|off, которая включает работу модуля;
>>>>> 2) есть директива default_charset, которая задаёт кодировку ответа;
>>>>> 3) есть директива source_charset, которая задаёт исходную кодировку.
>>>>> 
>>>>> Если source_charset и default_charset не совпадают, то делается 
>>>>> перекодировка.
>>>>> Если же задана только одна из таких директив, то перекодировка не 
>>>>> делается,
>>>>> а просто выставляется charset, исходя из этой директивы.
>>>>> 
>>>>> Мне такое положение кажется избыточным и неудобным.
>>>>> charset on|off появилась в связи с тем, что были планы сделать
>>>>> автоопределение кодировки клиента, как в руссокм Апаче.
>>>>> 
>>>>> Поскольку планы изменились и автоопределения не будет, то можно
>>>>> сделать такие изменения:
>>>>> 
>>>>> 1) директива charset задаёт кодировку ответа, charset off запрещает 
>>>>> выдачу
>>>>>    кодировки;
>>>>> 2) директива source_charset, которая задаёт исходную кодировку.
>>>>> 
>>>>> Если source_charset и charset не совпадают, то делается перекодировка.
>>>>> Если задан только source_charset, то ничего не делается.
>>>> 
>>>> То есть, если я в сервере хочу переопределить source_charset, мне надо 
>>>> там обязательно выставить и charset, чтобы оставить перекодировку 
>>>> выключенной (Если в http я задал умолчания)? Это плохо. Можно ли сделать 
>>>> в charset третью альтернативу - "source_charset", которая будет 
>>>> указывать, что перекодировку делать не надо никогда, а кодировку ответа 
>>>> выставлять всегда в source_charset? То есть, где-то так:
>>>> charset <кодировка>|off|source_charset
>>> 
>>> 
>>> Предлагается следующее:
>>> 
>>> http {
>>> 
>>>    # Content-Type: ...; charset=windows-1251
>>>    # перекодирование из koi8-r в windows-1251
>>> 
>>>    charset         windows-1251;
>>>    source_charset  koi8-r;
>>> 
>>>    server {
>>>        # унаследованный Content-Type: ...; charset=windows-1251
>>>        # перекодирования нет, так как charset и source_charset совпадают
>>> 
>>>        source_charset  windows-1251;
>>>    }
>> Вот, и я об этом - если я теперь добавлю
>>    server {
>>      # в нём нет *charset
>>    }
>> 
>> То в нём перекодировка будет по умолчанию. Если я этого не хочу, мне надо 
>> там написать ОБЕ директивы с одинаковым значением.
>
> Да, обе.

Я, похоже, ошибся. Почему обе ?

Возможны такие варианты внутри сервера:

1)
       # Content-Type: ...; charset=koi8-r
       # перекодирования нет, так как charset и унаследованный
       # source_charset совпадают
       charset         koi8-r;

2)
       # унаследованный Content-Type: ...; charset=windows-1251
       # перекодирования нет, так как charset и source_charset совпадают
       source_charset  windows-1251;

3)
       # Content-Type: ...; charset=utf-8
       # перекодирования нет, так как charset и source_charset совпадают
       charset         utf-8;
       source_charset  utf-8;



Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list