Php utf8 to win1251: PHP: Функции iconv — Manual

Перекодировка документа CP1251 в UTF-8 в Linux

13 Nov 2016 | Автор: dd |

Перевозил тут пачку сайтов с LAMP на LNAMP, где фронтэндом выступает NGINX. И все бы ничего, если бы не пачка статических сателлитов в кодировке Windows-1251 (cp1251).

Как тут прикололся девака – при анализе сайта, надо сначала чекать кодировку и в случае обнаружения кодировки сайта cp1251 – проверку возраста можно не осуществлять. Но, тем не менее, в инетах до сих пор встречаются такие мастадонты, которые клепают сайты в кодировке CP1251.

Под апачем, при добавлении сайта в ISP Panel это даже не заметишь, а вот при попытке добавить этот же сайт в Vesta CP, получаешь гемор на задницу с крикозябрами. Поэтому надо редактировать конфиг Nginx, предварительно прикрутив туда виндовую кодировку. Но, насколько я помню, у меня этот танец с бубнами не задался и в тот раз, я просто повесил саты на LAMP.

Так что оставалось либо плясать с бубнами вокруг прикручивания виндовой кодировки к NGINX, либо перекодивать файлы в родную для нжинкса UTF-8. Сделать это можно средствами текстового редактора Notepad++ путем перевода кодировки документа и последующего сохранения; либо же в самом линухе.  Как я выше заметил, саты статические, то есть на файлах, без использования базы данных. Поэтому перекодировать надо было именно файлы. С базой данных все происходило бы несколько иначе.

Перекодировка файла из CP1251 в UTF-8 производится в консоли через команду iconv
# iconv -f cp1251 -t utf8 FILE-CP1251 -o FILE-UTF8
либо же можно переписать файл в самого себя
# iconv -f cp1251 -t utf8 file.txt -o file.txt

Но поскольку мне надо было перекодировать большое число файлов php, содержащихся в разных папках, то мне пришлось составить  небольшое предложение:
# find /path-to-files/ -type f -name \*php -exec iconv -f cp1251 -t utf-8 '{}' -o '{}' \;

Конвертит все в лет.

Для конвертации кодировок есть еще утилита enconv, входящая в состав пакета enca – вот он как раз конвертит сам в себя по умолчанию, перезаписывая файл выходной кодировкой:
# enconv -c file. txt

но, к сожалению, я его не смог подружить с русским языком, т.к даже при указании языка через ключик -L russian скрипт матерился на ошибки. Но с другой стороны, все нормально решилось и через iconv

VN:F [1.9.21_1169]

Rating: 4.9/10 (15 votes cast)

VN:F [1.9.21_1169]

Rating: +1 (from 3 votes)

Смена кодировки сайта из CP1251 на UTF-8, 4.9 out of 10 based on 15 ratings

Теги: centos, сайты

Некорректное отображение текста сайтов на PHP версии 5.6 и выше

Некорректное отображение текста сайтов на PHP версии 5.6 и выше


07 сентября 2016

С введением новых серверов с версией PHP по умолчанию 5.6, к нам стали обращаться клиенты с проблемой отображения сайтов в кодировке WINDOWS-1251. Решение проблемы достаточно простое.


Несмотря на добавление в файл .htaccess кодировки по умолчанию для Apache и указанием кодировки в мета-тегах HTML, проблема не решалась. В заголовках от сервера приходил ответ с UTF-8 и браузер выбирал его.

# Кодировка по умолчанию в файле .htaccessAddDefaultCharset windows-1251

# Кодировка по умолчанию в файле .htaccess

AddDefaultCharset windows-1251

# Мета-тег в HTML коде страницы<meta http-equiv=»Content-Type» content=»text/html; charset=windows-1251″/>

# Мета-тег в HTML коде страницы

<meta http-equiv=»Content-Type» content=»text/html; charset=windows-1251″/>

# Заголовок приходящий от сервераContent-Type:text/html; charset=utf-8

# Заголовок приходящий от сервера

Content-Type:text/html; charset=utf-8

Проблема появилась из-за изменения кодировки по умолчанию в PHP, начиная с версии 5. 6: http://php.net/manual/ru/ini.core.php#ini.default-charset, теперь она жестко задана в UTF-8, а в более ранних версиях просто не задавалась и её можно было легко устанавливать через мета-тег или файл .htaccess

Решением проблемы является добавление строчки в файл .htaccess, которая меняет кодировку на windows-1251:

# Установка кодировки для PHPphp_value default_charset windows-1251

# Установка кодировки для PHP

php_value default_charset windows-1251

Данной проблеме подвержены все сайты, кодировка которых отличается от UTF-8 и скрипт в процессе работы не устанавливает параметр default_charset. К нам в основном обращаются с проблемой после установки сайтов на DLE (данная CMS работает в windows-1251).

В какой кодировке всё же лучше делать сайт?

По моим ощущениям люди часто не делают различий между понятиями «набор символов» и «кодировка», а зря. В большинстве кодировок разница, возможно, и невелика, но имея дело с Юникодом, нужно чётко понимать что есть что. Особенно больно по этим граблям ходят изучающие язык Python.

Набор символов (character set) — это некий набор значков, символов, каждому символу приписан номер.

Кодировка (encoding) — это способ представить (т. е. закодировать) последовательность из символов в виде последовательности байтов.

Рассмотрим пару примеров.

В набор символов Windows-1251 (http://en.wikipedia.org/wiki/Windows-1251) входят 256 различных символов со своими номерами. Символ «0» имеет номер 48, символ «R» — номер 82, символ «ы» — 251. Ещё раз — это пока абстрактный набор, просто список, который существует только в головах программистов.

Теперь рассмотрим кодировку Windows-1251. Эта кодировка позволяет представить символы из набора Windows-1251 в виде последовательности байтов. Кодировка устроена очень разумно — берём символ, берём его номер, записываем этот номер в виде байта! Символов 256, номера у них от 0 до 255, поэтому в байт точно влезет! Ура!

Набор символов ASCII содержит всего 128 символов. Кодировка ASCII тоже прямолинейна — берём и пишем в байт номер символа. Кстати, получается, что не всякую последовательность байтов можно считать текстом, закодированным с помощью ASCII: байтами со значением больше 127 никакие символы ASCII не кодируются.

Из-за того, что подобные кодировки записывали символы просто как их номера из набора, разница между этими понятиями была довольно размыта. С Юникодом дело обстоит иначе, здесь эта разница существенна.

Юникод — это набор символов (с номерами), в котором стараются собрать все-все алфавиты и даже больше.

Кодировок для этого набора придумали множество. Кодировка USC-2, например, устроена примерно как и Windows-1251: берём номер символа и записываем его как два байта. Увы, в два байта можно записать только значения от 0 до 65535, то есть USC-2 позволяет закодировать только часть знаков Юникода, да и то довольно накладным образом: любой символ, даже латинский, кодируются двумя байтами.

Кодировка UTF-8 хитрее. Первые 128 символов Юникода совпадают с символами ASCII. Эти символы UTF-8 кодирует как один байт, отсюда обратная совместимость: если мы используем только это подмножество символов, то нет разницы как их кодировать: последовательность байтов, полученных с помощью UTF-8 и ASCII будет совпадать. То есть если взять закодированный ASCII текст, и раскодировать его с помощью UTF-8, то в итоге получится тот же самый текст. Что UTF-8 делает с остальными символами, номера которых в Юникоде больше 128 — это уже отдельная увлекательная тема.

К сожалению, эти понятия иногда путаются даже в стандартах: в элементе в атрибуте «charset» указывается именно кодировка (encoding).

Хорошая статья на эту тему у Джоэла Сполски: http://www.joelonsoftware.com/articles/Unicode.html, очень её рекомендую всем, кто хочет раз и навсегда разобраться в этом предмете и больше никогда не путаться 😉

Кодировка — Проблемы с кодировкой — utf-8 — windows-1251

В этой статье я постараюсь поставить все точки над «и» (а так же над «i») в вопросе выбора кодировки для создаваемой HTML-страницы.

Когда я только начинал заниматься сайтостроительством у меня постоянно возникали проблемы из-за этих кодировок. Сохранишь HTML-страницу, выгрузишь на сервер, открываешь, бах, а там кракозябры. Ну вот и здравствуйте, приехали.

Или в среде отладки (например, локальная среда разработки «Денвер») все нормально, а с хостинга опять они, кракозябры проклятые, нагло на меня смотрят.

С движками сколько мучений было. Вдруг, непонятно почему, родные русские буквы превращаются в …

Сейчас мы с этим делом подробно разберемся и вы будете четко знать в какую кодировку сохранять HTML-страницу и посредством каких инструментов.

Для укрепления нашего взаимопонимания определимся с понятием кодировка. Так вот, кодировка — это таблица соответствия машинных кодов и символов алфавита. Есть какая-то последовательность машинных символов, которую умный компьютер, в соответствии с выбранной кодовой таблицей, заменяет на понятные нам буквы.

В 90-е годы прошлого века (древность какая, а я  как сейчас помню календарь 1991 года на стене) существовало 4-е кодировки для PC и еще одна, своя собственная, для Мака. Ирония судьбы заключается в том, что во всех этих кодировках символы латиницы ставились в соответствие машинным кодам по одному и тому же алгоритму, а вот по поводу кирилицы каждая из кодировок имела свое собственное мнение.

Вся эта путаница и привела к появлению кракозябров. Например, если слово «Вопрос», набранное в кодировке windows-1251, отобразить кодировкой KOI8-R, получится слово «бНОПНЯ».

Слава Богу, 90-е годы уже далеко позади и из пяти бредокодировок осталось всего 2-е нормальных. Но этого вполне достаточно, чтобы начинающий веб-мастер заблудился в двух соснах. Ничего, не переживайте, сейчас я вас выведу из этого леса!

На данный момент выбор для кодировки HTML-документа стоит между windows-1251 и utf-8. А теперь внимание: utf-8 гораздо богаче, мощнее и за ней будущее. . А еще в utf-8 есть знак «евро»; а еще utf-8 позволяет в одном HTML-файле совмещать кучу разнообразных специфических символов, используемых в таких языках как грузинский, иврит, китайский, японский; а еще utf-8 в кодировках HTML — это правило хорошего тона.

Надеюсь я вас убедил и вы будете использовать Юникод (кстати «utf-8» и «Юникод» — это синонимы или, если быть более точным, utf-8 — это одна из кодировок семейства Юникод, которая снискала популярность в среде веб-разработчиков).

Теперь пристально посмотрим на инструменты перекодирования файлов, которые я рекомендую вам использовать, уважаемый читатель.

Инструменты для работы с кодировками HTML файлов

Собственно, их всего три:

  • PSPad. Бесплатный текстовый редактор, мой любимый.
  • Notepad++. Еще один хороший текстовый редактор и тоже бесплатный.
  • Dreamweaver. Ну с Dreamweaver-ом вы с вами знакомы из моих видеоуроков по верстке сайта.

Загружаем какой-то HTML-файл в PSPad. И как же нам понять, что за кодировка у загруженного подопытного? Очень просто в строке состояния (внизу) все четко написано.

Кодировка открытого HTML-файла windows-1251

А у этого файла HTML кодировка utf-8

А теперь, создавая новый HTML-документ, позаботимся о его кодировке.

Идем в меню моего любимого PSPad-а. Нас интересует пункт Формат. В нем-то мы и поставим галку напротив кодировки utf-8.

Кодировка будущего HTML-файла будет utf-8

А так кодировка будующего файла — windows-1251

Теперь о том как изменить кодировку файла HTML. Да оказывается очень просто:

Пример перекодирования файла из кодировки windows-1251 в utf-8

Нужно кликнуть по требуемой кодировке в пункте меню Формат и кодировка сменится. После этого сохраняйте файл, он перекодирован, дело сделано.

Что касается Notepad++ все очень похоже на вышеописанную ситуацию. Только для работы с кодировками нужно использовать пункт меню Кодировки.

Вся разница заключается в том, что в случае Notepad++ появляются, специально разработанные для преобразования кодировок, пункты меню Преобразовать...  (лишние на мой взгляд, в PSPad все проще и поэтому я им пользуюсь). Соответственно, именно по ним и нужно кликать при желании поменять кодировки у нашего HTML-файла.

Кроме всего прочего, при сохранении в utf-8 у нас есть выбор: без BOM или с BOM. Нам, как веб-мастерам, нужно использовать кодировку UTF-8 (без BOM).

Вот что нам ответит Википедия на вопрос «что такое BOM»

Для определения формата представления Юникода в текстовом файле используется приём, по которому в начале текста записывается символ U+FEFF (неразрывный пробел с нулевой шириной), также именуемый меткой порядка байтов (англ. Byte Order Mark, BOM). Этот способ позволяет различать UTF-16LE и UTF-16BE, поскольку символа U+FFFE не существует. Также он иногда применяется для обозначения формата UTF-8, хотя к этому формату и неприменимо понятие порядка байтов.

Если прочитать приведенный текст 10 раз, почесать затылок, то становится понятно: для utf-8 BOM нам НЕ нужен. Кроме того, если сохранить файл с php-скриптом в кодировку utf-8 с BOM, то он не будет работать, потому что обработчик не поймет, что это за ерунда такая написана в начале файла-скрипта (я имею ввиду тот самый неразрывный пробел с нулевой шириной).

Так-так, осталось пристально взглянуть на Dreamweaver.

Создавая новый файл, обращайте внимание на то, в какой кодировке он будет создан. Для этого в окне создания нового документа File → New (Ctrl+N) воспользуйтесь кнопкой Preferences

И посмотрите, что задано в качестве кодировки по умолчанию:

Кодировка создаваемого HTML-файла по умолчанию в Dreamweaver

Перекодировать открытый HTML-файл в Dreamweaver можно в диалоге Page Properties, который запускается из меню ModifyPage Properties (Ctrl + J).

Выбирайте требуемую кодировку, нажимайте ОК и все, задача по перекодированию выполнена (а вот BOM все так же ненужен, не ставьте галку).

Определение кодировки браузерами

Итак, наш HTML-файл сохранен в выбранную нами кодировку. Теперь давайте разберемся с вопросом: каким образом браузер узнает о применяемой в данном HTML-файле кодировке?

Здесь есть три варианта:

1. Мы сами сообщаем браузеру о том, какая кодировка установлена для данного HTML файла. Делается это посредством META-тега

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

В приведенном примере браузеру дается указание, что загруженный HTML-файл сохранен в кодировке utf-8.

Если HTML-файл сохранен в кодировку windows-1251, то:

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

Кстати, при перекодировке файлов не забывайте изменять директивы в META-теге на актуальные. Dreamweaver, при изменении кодировки, делает это автоматически, а в других текстовых редакторах вам нужно самим ставить в соответствие примененную кодировку и директиву META-тега.

Полный HTML выглядит следующим образом (привожу его для понимания вопроса «в каком месте указывается META-тег с директивой кодировки» внимание на 4-ю строку):


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
</head>
<body> Ну и т.д.

2. При помощи файла .htaccess. Иногда сервер насильно передает заголовки для загружаемых HTML-файлов и сообщает браузеру кодировку по умолчанию. В этом случае браузер не обращает внимания на директивы в META-теге, а отображает HTML-файл в той кодировки, которую сообщил сервер. Чтобы файл загружалсяв той кодировке, которая нужна вам (часто хостинг насильно указывает кодировку windows-1251), в корне хостинг-директории создается файл с именем «.htaccess».

Файл этот предназначен для дополнительной конфигурации сервера. Действие .htaccess-директив распространяется на все файлы и подкаталоги, которые находятся в том каталоге, куда вы сохранили файл .htaccess.

Создать этот файл можно, например, в Total Commander-е, нажав горячее сочетание клавиш Shift+F4 и указав имя создаваемому файлу .htaccess. Далее в текстовом редакторе указываются директивы дополнительных настроек кодировки по умолчанию.

Для HTML-файлов в кодировке utf-8 в .htaccess нужно написать одну строку:

AddDefaultCharset UTF-8

Для HTML-файлов в кодировке Windows-1251:

AddDefaultCharset Windows-1251

Если ваш хостинг хитро-мудрый и не обращает внимания на эти директивы, то можно попробовать:

charsetdisable on
AddDefaultCharset Off

Если и это не дало результата, то просто спросите у своего хостера, чего вам делать, чтобы отключить кодировку по умолчанию :). Все это зависит от конкретных настроек сервера у хостинг-провайдера.

3. PHP-инструкция, указывающая кодировку по умолчанию. В файле, который нужно отобразить в желаемой кодировке, не смотря на настройки сервера хостинг-провайдера, в самом начале указывается директива с php-кодом:

<?php header('Content-type: text/html; charset=utf-8')?>

Этот php-код отправит заголовок сервера с указанием кодировки по умолчанию для браузера. В приведенном примере, для отображения страницы, будет применяться кодировка utf-8.

Против такого лома, обычно, приемов в настройках сервера хостинг-провайдера не остается.

Хочу заметить, что для обработки php-инструкций сервером, html-файл должен иметь расширение .php (например index.php).

Есть еще вопросы по кодировкам? Пишите в комментарии. Нужно решить эти проблемы раз и на всегда 🙂

С уважением, Андрей Морковин.

Bash скрипт для рекурсивного преобразования файлов windows-1251 -> utf-8 · GitHub

Bash скрипт для рекурсивного преобразования файлов windows-1251 -> utf-8 · GitHub

Мгновенно делитесь кодом, заметками и фрагментами.

Bash-скрипт для рекурсивного преобразования файлов windows-1251 -> utf-8

#! / Bin / bash
# Рекурсивное преобразование файлов windows-1251 -> utf-8
# Поместите этот файл в корень вашего сайта, добавьте разрешение на выполнение и запустите
# Преобразует *.php, * .html, * .css, * .js файлы.
# Чтобы добавить тип файла по расширению, например * .cgi, добавьте ‘-o -name «* .cgi»‘ к команде поиска
find . / -name «* .php» -o -name «* .html» -o -name «* .css» -o -name «* .js» -type f |
при чтении файла
до
echo «$ file»
мв $ файл $ файл.icv
iconv -f WINDOWS-1251 -t UTF-8 $ file.icv> $ file
rm -f $ file.icv
выполнено

Вы не можете выполнить это действие в настоящее время.

Вы вошли в систему с другой вкладкой или окном. Перезагрузите, чтобы обновить сеанс.
Вы вышли из системы на другой вкладке или в другом окне. Перезагрузите, чтобы обновить сеанс.

Преобразование специальных символов в объекты HTML

ISO-8859-1 ISO8859-1 Западноевропейская, Latin-1
ISO-8859-15 ISO8859-15 Западноевропейская, Latin-9. Добавляет знак евро, французский и финский
буквы отсутствуют в Latin-1 (ISO-8859-1).
UTF-8 Многобайтный 8-битный Unicode, совместимый с ASCII.
cp866 ibm866, 866 Кириллица, специфичная для DOS.
Эта кодировка поддерживается в 4.3.2.
cp1251 Windows-1251, Win-1251, 1251 Кириллица, специфичная для Windows.
Эта кодировка поддерживается в 4.3.2.
cp1252 Окна-1252, 1252 Специальная кодировка Windows для западноевропейских языков.
КОИ8-Р koi8-ru, koi8r Русский. Эта кодировка поддерживается в 4.3.2.
BIG5 950 Традиционный китайский, в основном используемый на Тайване.
ГБ2312 936 Упрощенный китайский, национальный стандартный набор символов.
BIG5-HKSCS Big5 с расширениями Гонконга, традиционный китайский.
Shift_JIS SJIS, 932 Японский
EUC-JP EUCJP Японский

PostgreSQL: Документация: 9.3: Поддержка набора символов

Поддержка набора символов в PostgreSQL позволяет хранить текст в
множество наборов символов (также называемых кодировками), включая
однобайтовые наборы символов, такие как серия ISO 8859 и
многобайтовые наборы символов, такие как EUC (Extended Unix Code), UTF-8 и Mule
внутренний код.Можно использовать все поддерживаемые наборы символов.
прозрачно для клиентов, но некоторые из них не поддерживаются для использования
внутри сервера (то есть как кодирование на стороне сервера). По умолчанию
набор символов выбирается при инициализации кластера базы данных PostgreSQL с помощью initdb. Его можно переопределить при создании
база данных, поэтому у вас может быть несколько баз данных с разными
набор символов.

Однако важным ограничением является то, что каждая база данных
набор символов должен быть совместим с настройками локали базы данных LC_CTYPE (классификация символов) и LC_COLLATE (порядок сортировки строк).Для
C или POSIX
языковой стандарт, разрешен любой набор символов, но для других языков есть
это только один набор символов, который будет работать правильно. (В Windows
однако кодировку UTF-8 можно использовать с любой локалью.)

Таблица 22-1 показывает
наборы символов, доступные для использования в PostgreSQL.

Таблица 22-1. PostgreSQL
Наборы символов

Имя Описание Язык Сервер? байт / символ Псевдонимы
BIG5 Большая пятерка Традиционный китайский 1-2 WIN950, Windows950
EUC_CN Расширенный код UNIX — CN Китайский упрощенный Есть 1-3
EUC_JP Расширенный код UNIX-JP Японский Есть 1-3
EUC_JIS_2004 Расширенный код UNIX-JP, JIS X 0213 Японский Есть 1-3
EUC_KR Расширенный код UNIX-KR Корейский Есть 1-3
EUC_TW Расширенный код UNIX-TW Традиционный китайский, Тайваньский Есть 1-3
ГБ18030 Национальный стандарт Китайский 1–4
ГБК Национальный стандарт расширенный Китайский упрощенный 1-2 WIN936, Windows 936
ISO_8859_5 ISO 8859-5, ECMA 113 Латиница / кириллица Есть 1
ISO_8859_6 ISO 8859-6, ECMA 114 Латинский / арабский Есть 1
ISO_8859_7 ISO 8859-7, ECMA 118 Латинский / греческий Есть 1
ISO_8859_8 ISO 8859-8, ECMA 121 Латиница / Иврит Есть 1
JOHAB JOHAB Корейский (хангыль) 1-3
KOI8R КОИ8-Р Кириллица (русская) Есть 1 КОИ8
КОИ8У КОИ8-У Кириллица (украинская) Есть 1
LATIN1 ISO 8859-1, ECMA 94 Западноевропейская Есть 1 ISO88591
LATIN2 ISO 8859-2, ECMA 94 Центральноевропейская Есть 1 ISO88592
LATIN3 ISO 8859-3, ECMA 94 Южноевропейский Есть 1 ISO88593
ЛАТИН 4 ISO 8859-4, ECMA 94 Северо-Европейский Есть 1 ISO88594
LATIN5 ISO 8859-9, ECMA 128 Турецкий Есть 1 ISO88599
LATIN6 ISO 8859-10, ECMA 144 Скандинавский Есть 1 ISO885910
LATIN7 ISO 8859-13 Балтика Есть 1 ISO885913
LATIN8 ISO 8859-14 Кельтский Есть 1 ISO885914
ЛАТИН 9 ISO 8859-15 LATIN1 с евро и акцентами Есть 1 ISO885915
LATIN10 ISO 8859-16, ASRO SR
14111
Румынский Есть 1 ISO885916
MULE_INTERNAL Мул внутренний код Многоязычный Emacs Есть 1–4
SJIS Сдвиг JIS Японский 1-2 Мсканджи, ShiftJIS, WIN932,
Окна932
SHIFT_JIS_2004 Сдвиг JIS, JIS X 0213 Японский 1-2
SQL_ASCII не указано (см. Текст) любой Есть 1
UHC Единый код хангыль Корейский 1-2 WIN949, Windows 949
UTF8 Unicode, 8-битный все Есть 1–4 Юникод
WIN866 Окна CP866 Кириллица Есть 1 ALT
WIN874 Окна CP874 Тайский Есть 1
WIN1250 Окна CP1250 Центральноевропейская Есть 1
WIN1251 Окна CP1251 Кириллица Есть 1 ВЫИГРАТЬ
WIN1252 Окна CP1252 Западноевропейская Есть 1
WIN1253 Окна CP1253 Греческий Есть 1
WIN1254 Окна CP1254 Турецкий Есть 1
WIN1255 Окна CP1255 Еврейский Есть 1
WIN1256 Окна CP1256 Арабский Есть 1
WIN1257 Окна CP1257 Балтика Есть 1
WIN1258 Окна CP1258 Вьетнамский Есть 1 ABC, TCVN,
TCVN5712, VSCII

Не все клиентские API поддерживают
все перечисленные наборы символов.Например, драйвер PostgreSQL JDBC не поддерживает
MULE_INTERNAL, LATIN6, LATIN8 и
ЛАТИНСКИЙ 10.

Параметр SQL_ASCII ведет себя
значительно отличается от других настроек. Когда сервер
набор символов — SQL_ASCII, сервер
интерпретирует байтовые значения 0-127 в соответствии со стандартом ASCII, а
байтовые значения 128–255 считаются неинтерпретируемыми символами. Нет
преобразование кодировки будет выполнено, если установлено значение SQL_ASCII. Таким образом, этот параметр не так уж и хорош.
объявление, что используется определенная кодировка, как объявление
незнание кодировки.В большинстве случаев, если вы работаете
с любыми данными, отличными от ASCII, неразумно использовать параметр SQL_ASCII, потому что PostgreSQL не сможет вам помочь
преобразование или проверка символов, отличных от ASCII.

initdb определяет символ по умолчанию
установить (кодировку) для PostgreSQL
кластер. Например,

 initdb -E EUC_JP 

устанавливает набор символов по умолчанию на EUC_JP (расширенный код Unix для японского языка). Ты можешь
используйте —encoding вместо -E, если вы предпочитаете более длинные строки параметров. Если нет
-E или —encoding
задана опция, initdb пытается
определить подходящую кодировку для использования на основе указанного или
языковой стандарт по умолчанию.

Вы можете указать нестандартную кодировку при создании базы данных.
время при условии, что кодировка совместима с выбранной
язык:

createdb -E EUC_KR -T template0 --lc-collate = ko_KR.euckr --lc-ctype = ko_KR.euckr корейский 

Это создаст базу данных с именем korean, которая использует набор символов EUC_KR и локаль ko_KR.
Другой способ добиться этого — использовать эту команду SQL:

СОЗДАТЬ БАЗУ ДАННЫХ корейский С КОДИРОВАНИЕМ 'EUC_KR' LC_COLLATE = 'ko_KR.euckr' LC_CTYPE = 'ko_KR.euckr 'TEMPLATE = template0; 

Обратите внимание, что приведенные выше команды определяют копирование базы данных template0. При копировании любой другой базы данных,
настройки кодировки и локали не могут быть изменены по сравнению с
исходной базы данных, поскольку это может привести к повреждению данных. Для
дополнительную информацию см. в разделе
21.3.

Кодировка для базы данных хранится в системном каталоге.
pg_database. Вы можете увидеть это, используя
параметр psql -l или
команда \ l.

 $  psql -l 
                                         Список баз данных
   Имя | Владелец | Кодирование | Сортировка | Ctype | Привилегии доступа
----------- + ---------- + ----------- + ------------- + - ------------ + -------------------------------------
 clocaledb | хлиннака | SQL_ASCII | C | C |
 englishdb | хлиннака | UTF8 | en_GB.UTF8 | en_GB.UTF8 |
 японский | хлиннака | UTF8 | ja_JP.UTF8 | ja_JP.UTF8 |
 корейский | хлиннака | EUC_KR | ko_KR.euckr | ko_KR.euckr |
 postgres | хлиннака | UTF8 | fi_FI.UTF8 | fi_FI.UTF8 |
 template0 | хлиннака | UTF8 | fi_FI.UTF8 | fi_FI.UTF8 | {= c / hlinnaka, hlinnaka = CTc / hlinnaka}
 template1 | хлиннака | UTF8 | fi_FI.UTF8 | fi_FI.UTF8 | {= c / hlinnaka, hlinnaka = CTc / hlinnaka}
(7 рядов) 

Важно: В большинстве современных операционных систем PostgreSQL может определить, какой набор символов
подразумевается настройкой LC_CTYPE, и это
заставит использовать только соответствующую кодировку базы данных.На
старые системы, вы несете ответственность за использование
кодировка, ожидаемая выбранной вами локалью. Ошибка в
эта область может привести к странному поведению зависящего от локали
такие операции, как сортировка.

PostgreSQL позволит
суперпользователи для создания баз данных с кодировкой SQL_ASCII, даже если LC_CTYPE не C или
POSIX. Как отмечалось выше, SQL_ASCII не требует, чтобы данные, хранящиеся в
база данных имеет какую-либо конкретную кодировку, поэтому этот выбор ставит
риски ненадлежащего поведения, зависящего от местных условий.Используя эту комбинацию
настройки устарели и когда-нибудь могут быть полностью запрещены.

PostgreSQL поддерживает автоматический
преобразование набора символов между сервером и клиентом наверняка
комбинации наборов символов. Информация о преобразовании хранится в
системный каталог pg_conversion.
PostgreSQL поставляется с некоторыми
предопределенные преобразования, как показано в Таблице 22-2. Ты
может создать новое преобразование с помощью команды SQL CREATE CONVERSION.

Таблица 22-2. Преобразование набора символов клиент / сервер

Серверный набор символов Доступные наборы символов клиента
BIG5 не поддерживается в качестве сервера
кодировка
EUC_CN EUC_CN, MULE_INTERNAL, UTF8
EUC_JP EUC_JP, MULE_INTERNAL, SJIS,
UTF8
EUC_JIS_2004 EUC_JIS_2004,
SHIFT_JIS_2004, UTF8
EUC_KR EUC_KR, MULE_INTERNAL, UTF8
EUC_TW EUC_TW, BIG5, MULE_INTERNAL,
UTF8
ГБ18030 не поддерживается в качестве сервера
кодировка
ГБК не поддерживается в качестве сервера
кодировка
ISO_8859_5 ISO_8859_5,
KOI8R, MULE_INTERNAL, UTF8,
WIN866, WIN1251
ISO_8859_6 ISO_8859_6,
UTF8
ISO_8859_7 ISO_8859_7,
UTF8
ISO_8859_8 ISO_8859_8,
UTF8
JOHAB не поддерживается в качестве сервера
кодировка
KOI8R KOI8R, ISO_8859_5, MULE_INTERNAL,
UTF8, WIN866,
WIN1251
КОИ8У КОИ8У, UTF8
LATIN1 LATIN1, MULE_INTERNAL, UTF8
LATIN2 LATIN2, MULE_INTERNAL, UTF8,
WIN1250
LATIN3 LATIN3, MULE_INTERNAL, UTF8
ЛАТИН 4 LATIN4, MULE_INTERNAL, UTF8
LATIN5 LATIN5, UTF8
LATIN6 LATIN6, UTF8
LATIN7 LATIN7, UTF8
LATIN8 LATIN8, UTF8
ЛАТИН 9 LATIN9, UTF8
LATIN10 LATIN10, UTF8
MULE_INTERNAL MULE_INTERNAL,
BIG5, EUC_CN,
EUC_JP, EUC_KR,
EUC_TW, ISO_8859_5, KOI8R,
LATIN1 в LATIN4,
SJIS, WIN866,
WIN1250, WIN1251
SJIS не поддерживается в качестве сервера
кодировка
SHIFT_JIS_2004 не поддерживается в качестве сервера
кодировка
SQL_ASCII любой (конвертации не будет
выполнено)
UHC не поддерживается в качестве сервера
кодировка
UTF8 все поддерживаются
кодировки
WIN866 WIN866, ISO_8859_5, KOI8R,
MULE_INTERNAL, UTF8, WIN1251
WIN874 WIN874, UTF8
WIN1250 WIN1250, LATIN2, MULE_INTERNAL,
UTF8
WIN1251 WIN1251, ISO_8859_5, KOI8R,
MULE_INTERNAL, UTF8, WIN866
WIN1252 WIN1252, UTF8
WIN1253 WIN1253, UTF8
WIN1254 WIN1254, UTF8
WIN1255 WIN1255, UTF8
WIN1256 WIN1256, UTF8
WIN1257 WIN1257, UTF8
WIN1258 WIN1258, UTF8

Чтобы включить автоматическое преобразование набора символов, вы должны указать
PostgreSQL набор символов
(кодировка), которую вы хотели бы использовать в клиенте.Есть несколько
способов добиться этого:

  • Использование команды \ encoding в
    psql. \ encoding позволяет изменять кодировку клиента на
    муха. Например, чтобы изменить кодировку на SJIS, введите:

     \ кодировка SJIS 
  • libpq (Раздел 31.10) имеет функции для управления
    клиентская кодировка.

  • Использование SET client_encoding TO. Параметр
    кодирование клиента может быть выполнено с помощью этой команды SQL:

     УСТАНОВИТЬ CLIENT_ENCODING TO 'значение'; 

    Также вы можете использовать стандартный синтаксис SQL SET
    ИМЕНА для этого:

     УСТАНОВИТЬ ИМЯ 'значение'; 

    Для запроса текущей клиентской кодировки:

     ПОКАЗАТЬ client_encoding; 

    Для возврата к кодировке по умолчанию:

     СБРОС client_encoding; 
  • Использование PGCLIENTENCODING.Если
    переменная среды PGCLIENTENCODING — это
    определена в клиентской среде, эта клиентская кодировка
    автоматически выбирается при подключении к серверу.
    (Впоследствии это можно изменить, используя любой из других методов.
    упомянуто выше.)

  • Использование переменной конфигурации client_encoding.
    Если установлена ​​переменная client_encoding,
    эта клиентская кодировка выбирается автоматически при подключении к
    сервер сделан. (Впоследствии это может быть отменено с помощью любого
    других методов, упомянутых выше.)

Если преобразование определенного символа невозможно —
предположим, вы выбрали EUC_JP для сервера
и LATIN1 для клиента, а некоторые
Возвращаются японские символы, которые не имеют представления
в LATIN1 — сообщается об ошибке.

Если набор символов клиента определен как SQL_ASCII, преобразование кодировки отключено,
независимо от набора символов сервера. Как и в случае с сервером,
использование SQL_ASCII неразумно, если вы не
работа с данными в формате ASCII.

Это хорошие источники для начала изучения различных видов
системы кодирования.

CJKV Обработка информации: китайский,
Японский, корейский и вьетнамский компьютерные технологии

Содержит подробные объяснения EUC_JP, EUC_CN, EUC_KR, EUC_TW.

http://www.unicode.org/

Веб-сайт Консорциума Unicode.

RFC 3629

UTF-8 (8-битный UCS / Unicode
Формат преобразования) определяется здесь.

Преобразование специальных символов в объекты HTML

ISO-8859-1 ISO8859-1 Западноевропейская, Latin-1.
ISO-8859-5 ISO8859-5 Малоиспользуемая кириллица (латиница / кириллица).
ISO-8859-15 ISO8859-15 Западноевропейская, Latin-9. Добавляет знак евро, французский и финский
буквы отсутствуют в Latin-1 (ISO-8859-1).
UTF-8 Многобайтный 8-битный Unicode, совместимый с ASCII.
cp866 ibm866, 866 Кириллица, специфичная для DOS.
cp1251 Windows-1251, Win-1251, 1251 Кириллица, специфичная для Windows.
cp1252 Окна-1252, 1252 Специальная кодировка Windows для западноевропейских языков.
КОИ8-Р кои8-ру, кои8р Русский.
BIG5 950 Традиционный китайский, в основном используемый на Тайване.
ГБ 2312 936 Упрощенный китайский, национальный стандартный набор символов.
BIG5-HKSCS Big5 с расширениями Гонконга, традиционный китайский.
Shift_JIS SJIS, SJIS-win, cp932, 932 Японский
EUC-JP EUCJP, eucJP-выигрыш Японский
MacRoman Кодировка, которая использовалась в Mac OS.
» Пустая строка активирует обнаружение по кодировке скрипта (многобайтный Zend),
default_charset и текущий
локаль (см. nl_langinfo () и
setlocale ()) в этом порядке.Не рекомендуется.

Преобразование всех применимых символов в объекты HTML

ISO-8859-1 ISO8859-1 Западноевропейская, Latin-1.
ISO-8859-5 ISO8859-5 Малоиспользуемая кириллица (латиница / кириллица).
ISO-8859-15 ISO8859-15 Западноевропейская, Latin-9.Добавляет знак евро, французский и финский
буквы отсутствуют в Latin-1 (ISO-8859-1).
UTF-8 Многобайтный 8-битный Unicode, совместимый с ASCII.
cp866 ibm866, 866 Кириллица, специфичная для DOS.
cp1251 Windows-1251, Win-1251, 1251 Кириллица, специфичная для Windows.
cp1252 Окна-1252, 1252 Специальная кодировка Windows для западноевропейских языков.
КОИ8-Р кои8-ру, кои8р Русский.
BIG5 950 Традиционный китайский, в основном используемый на Тайване.
ГБ 2312 936 Упрощенный китайский, национальный стандартный набор символов.
BIG5-HKSCS Big5 с расширениями Гонконга, традиционный китайский.
Shift_JIS SJIS, SJIS-win, cp932, 932 Японский
EUC-JP EUCJP, eucJP-выигрыш Японский
MacRoman Кодировка, которая использовалась в Mac OS.
» Пустая строка активирует обнаружение по кодировке скрипта (многобайтный Zend),
default_charset и текущий
локаль (см. nl_langinfo () и
setlocale ()) в этом порядке. Не рекомендуется.

Преобразовать все объекты HTML в соответствующие символы

ISO-8859-1 ISO8859-1 Западноевропейская, Latin-1.
ISO-8859-5 ISO8859-5 Малоиспользуемая кириллица (латиница / кириллица).
ISO-8859-15 ISO8859-15 Западноевропейская, Latin-9. Добавляет знак евро, французский и финский
буквы отсутствуют в Latin-1 (ISO-8859-1).
UTF-8 Многобайтный 8-битный Unicode, совместимый с ASCII.
cp866 ibm866, 866 Кириллица, специфичная для DOS.
cp1251 Windows-1251, Win-1251, 1251 Кириллица, специфичная для Windows.
cp1252 Окна-1252, 1252 Специальная кодировка Windows для западноевропейских языков.
КОИ8-Р кои8-ру, кои8р Русский.
BIG5 950 Традиционный китайский, в основном используемый на Тайване.
ГБ 2312 936 Упрощенный китайский, национальный стандартный набор символов.
BIG5-HKSCS Big5 с расширениями Гонконга, традиционный китайский.
Shift_JIS SJIS, SJIS-win, cp932, 932 Японский
EUC-JP EUCJP, eucJP-выигрыш Японский
MacRoman Кодировка, которая использовалась в Mac OS.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *