<!-- review: finished -->

<a id="adc-http-charset"></a>

# Charset

Добавляет указанную кодировку в поле `Content-Type`  заголовка ответа. Кроме того, модуль может перекодировать данные из одной кодировки в другую с некоторыми ограничениями:

* перекодирование осуществляется только в одну сторону — от сервера к клиенту,
* перекодироваться могут только однобайтные кодировки
* или однобайтные кодировки в UTF-8 и обратно.

<a id="adc-configuration-example-10"></a>

## Пример конфигурации

```nginx
include        conf/koi-win;

charset        windows-1251;
source_charset koi8-r;
```

<a id="adc-directives-11"></a>

## Директивы

<a id="adc-charset"></a>

### charset

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `charset` кодировка | `off`;          |
|------------------------------------------------------------------------------------------|---------------------------------------|
| По умолчанию                                                                             | `charset off;`                        |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location, if в location |

Добавляет указанную кодировку в поле `Content-Type`  заголовка ответа. Если эта кодировка отличается от указанной в директиве [source_charset](https://angie.software//angie/docs/configuration/modules/http/http_charset.md#source-charset), то выполняется перекодирование.

Параметр `off` отменяет добавление кодировки в поле `Content-Type`  заголовка ответа.

Кодировка может быть задана с помощью переменной:

```nginx
charset $charset;
```

В этом случае необходимо, чтобы все возможные значения переменной присутствовали хотя бы один раз в любом месте конфигурации в виде директив [charset_map](https://angie.software//angie/docs/configuration/modules/http/http_charset.md#charset-map), charset или [source_charset](https://angie.software//angie/docs/configuration/modules/http/http_charset.md#source-charset). Для кодировок utf-8, windows-1251 и koi8-r для этого достаточно включить в конфигурацию файлы conf/koi-win, conf/koi-utf и conf/win-utf. Для других кодировок можно просто сделать фиктивную таблицу перекодировки, например:

```nginx
charset_map iso-8859-5 _ { }
```

Кроме того, кодировка может быть задана в поле `X-Accel-Charset` заголовка ответа. Эту возможность можно запретить с помощью директив [proxy_ignore_headers](https://angie.software//angie/docs/configuration/modules/http/http_proxy.md#proxy-ignore-headers), [fastcgi_ignore_headers](https://angie.software//angie/docs/configuration/modules/http/http_fastcgi.md#fastcgi-ignore-headers), [uwsgi_ignore_headers](https://angie.software//angie/docs/configuration/modules/http/http_uwsgi.md#uwsgi-ignore-headers), [scgi_ignore_headers](https://angie.software//angie/docs/configuration/modules/http/http_scgi.md#scgi-ignore-headers) и [grpc_ignore_headers](https://angie.software//angie/docs/configuration/modules/http/http_grpc.md#grpc-ignore-headers).

<a id="adc-charset-map"></a>

### charset_map

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `charset_map` кодировка1 кодировка2  { ... }   |
|------------------------------------------------------------------------------------------|------------------------------------------------|
| По умолчанию                                                                             | —                                              |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http                                           |

Описывает таблицу перекодирования из одной кодировки в другую. Таблица для обратного перекодирования строится на основании тех же данных. Коды символов задаются в шестнадцатеричном виде. Неописанные символы в пределах 80-FF заменяются на "?". При перекодировании из UTF-8 символы, отсутствующие в однобайтной кодировке, заменяются на "&#XXXX;".

Пример:

```nginx
charset_map koi8-r windows-1251 {
    C0 FE ; # small yu
    C1 E0 ; # small a
    C2 E1 ; # small b
    C3 F6 ; # small ts
}
```

При описании таблицы перекодирования в UTF-8, коды кодировки UTF-8 должны быть указаны во второй колонке, например:

```nginx
charset_map koi8-r utf-8 {
    C0 D18E ; # small yu
    C1 D0B0 ; # small a
    C2 D0B1 ; # small b
    C3 D186 ; # small ts
}
```

Полные таблицы преобразования из koi8-r в windows-1251 и из koi8-r и windows-1251 в utf-8 входят в дистрибутив и находятся в файлах conf/koi-win, conf/koi-utf и conf/win-utf.

<a id="adc-charset-types"></a>

### charset_types

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `charset_types` mime-тип ...;                                                                              |
|------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------|
| По умолчанию                                                                             | `charset_types text/html text/xml text/plain text/vnd.wap.wml application/javascript application/rss+xml;` |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location                                                                                     |

Разрешает работу модуля в ответах с указанными MIME-типами в дополнение к `text/html`. Специальное значение `*` соответствует любому MIME-типу.

<a id="adc-override-charset"></a>

### override_charset

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `override_charset` `on` | `off`;      |
|------------------------------------------------------------------------------------------|---------------------------------------|
| По умолчанию                                                                             | `override_charset off;`               |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location, if в location |

Определяет, выполнять ли перекодирование для ответов, полученных от проксированного сервера или от FastCGI/uwsgi/SCGI/gRPC-сервера, если в ответах уже указана кодировка в поле `Content-Type`  заголовка ответа. Если перекодирование разрешено, то в качестве исходной кодировки используется кодировка, указанная в полученном ответе.

#### NOTE
Если ответ был получен в подзапросе, то, независимо от значения директивы override_charset, всегда выполняется перекодирование из кодировки ответа в кодировку основного запроса.

<a id="adc-source-charset"></a>

### source_charset

| [Синтаксис](https://angie.software//angie/docs/configuration/configfile.md#configfile)   | `source_charset` кодировка;           |
|------------------------------------------------------------------------------------------|---------------------------------------|
| По умолчанию                                                                             | —                                     |
| [Контекст](https://angie.software//angie/docs/configuration/configfile.md#configfile)    | http, server, location, if в location |

Задает исходную кодировку ответа. Если эта кодировка отличается от указанной в директиве [charset](https://angie.software//angie/docs/configuration/modules/http/http_charset.md#id3), то выполняется перекодирование.
