IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   Проблема с кодировкой (https://www.imho.ws/showthread.php?t=103704)

Naked 15.05.2006 20:24

Проблема с кодировкой
 
Ситуация такая - сервер на Fedora, дефолтовая кодировка utf, скрипты написаны в нем, т.е. с кодировкой utf, в скриптах идет обращение к базе и выборка из нее элементов, причем кодировка базы либо Windows-1251, либо koi8-r (базы на разных серваках), в итоге хтмл страничка не отображает правильно данные, вытащенные из базы, кодировка страницы соответственно utf. Пытался делать SET CLIENT_ENCODING TO UTF8 в базе (да, кстати, база Postgres), но это не помогает, но если ,например, база на windows-1251, а я делаю SET CLIENT_ENCODING TO KOI8-R, а потом в скрипте $element = iconv('KOI8-R', 'UTF-8', $element), то все отображается нормально :idontnow: Помогите решить проблему (писать везде iconv - не решение, слишком много того, где что-то выводится:) )

Спасибо. :yees:

RaZEr 15.05.2006 20:31

set character_set_results=utf8 в mysql. В постгресе попробуй set names utf8

Naked 15.05.2006 20:34

Цитата:

RaZEr:
set character_set_results=utf8
это, если я правильно понял нужно в htaccess написать? написал - не получается :idontnow: проблема в том, что на выходе с сервера к клиенту, вроде получается страница половина которой на utf (это текст который в самом скрипте), а половина в другой кодировке (это данные, которые из базы берутся), и то, что написано все преобразует правильно?

Хм, или это к базе Mysql? Проверил на постгресе - не подходит...:(

RaZEr 15.05.2006 20:42

А что говорит pg_client_encoding() до и после SET CLIENT_ENCODING TO UTF8?

Naked 15.05.2006 20:51

Цитата:

RaZEr:
А что говорит pg_client_encoding()
"До" говорит WIN
А "после" говорит UNICODE... :idontnow:

Причем кодировку базы оно все-таки меняет....на какую-то, тока вот при выводе на экран явно не utf:) думаю, может эта проблема в пхп? Я записываю данные из базы в переменную... utf же 2 байта требует на символ, может там как-нибудь нужно по специальному переменные создавать :idontnow:

RaZEr 15.05.2006 20:59

Цитата:

тока вот при выводе на экран явно не utf
А что на экран вываливается? Если выводишь слово из 10 русских букв, сколько иероглифов получается?

Naked 15.05.2006 21:03

вот вместо:
Иван Николаевич Панов
Выводит:
йЧБО оЙЛПМБЕЧЙЮ рБОПЧ
Если не делаю Set CLIENT...... то выводит:
���� ���������� �����

RaZEr 15.05.2006 21:07

Цитата:

йЧБО оЙЛПМБЕЧЙЮ рБОПЧ
это KOI8

Naked 15.05.2006 21:11

Цитата:

RaZEr:
это KOI8
:biggrin: неа, ставлю в браузере отображение koi8 и получаю:
п╧п╖п▒п· п╬п≥п⌡п÷п°п▒п∙п╖п≥п╝ я─п▒п·п÷п╖
(это если делаю SET CLIENT_ENCODING TO UTF8)
А вот если не делаю, то пишет как и положено:
Иван Николаевич Панов (при кодировке в браузере koi8)
:idontnow:

RaZEr 15.05.2006 21:19

Цитата:

неа, ставлю в браузере отображение koi8 и получаю
Если ты перекодируешь это (ASCII) WIN->KOI, то будут нормальные данные. То есть база перекодировала не koi->utf, а win->utf.

Naked 16.05.2006 16:49

Фух, разобрался...:) оказалось, что кодировка самой базы была win, а записи в этой базе хранились в кодировке koi8, от этого получалось, что действительно делалось WIN->UTF8, и записи преобразовывались в утф, тока сами они были в кои8, короче запутано все было - в итоге перекодировал всю таблицу, теперь там в нормальной виндовой кодировке и кодировка таблицы тоже виндовая:) Очень помог, RaZEr ;)

Naked 23.05.2006 18:00

Хм, опять почти такая же проблемка - нужно сделать запрос к базе, а в запросе есть русские буквы (SELECT * FROM table WHERE city='Санкт-Петербург'), соответственно запрос пишу в шелле (пользуюсь putty), в скрипте ($sql = "SELECT * FROM table WHERE city='Санкт-Петербург'"), затем выполняю его, но результата никакого... если запрос вывести на страницу (сам текст), скопировать, потом выполнить его в самой базе, то все выполняется, думаю проблема опять в кодировке - ведь в скрипте получается utf8, а база теперь на SQL_ASCII :) всякие команды базе типа "SET CLIENT_ENCODING TO UTF8" не помогает... перевод $sql в виндовскую кодировку тоже не помогает.... даже не знаю что делать :idontnow: Подскажите, как решить проблему...:)

Hubbitus 24.05.2006 10:42

А если из шелла прямо запрос в UTF8 ввести? С помощью iconv например, если локаль не юникодная.

Naked 24.05.2006 19:51

Цитата:

Hubbitus:
А если из шелла прямо запрос в UTF8 ввести?
не получается - если ввожу не делая "SET CLIENT_ENCODING TO UTF8", то выводит 0 строк, хотя точно есть строки... А если делаю SET CLIENT_ENCODING TO UTF8, то пишет что неправильная последовательность символов для UTF8... и коды всякие... локаль наверное юникодная - в линуксе федоре она родная юникодная...
даже не знаю что и делать :idontnow:

Saruman 25.05.2006 03:00

Цитата:

Naked:
локаль наверное юникодная
наверное или юникодная? в какой кодировке русские символы, которые ты в базу отправляешь? Выполни перед их отправкой SET NAMES utf8

Hubbitus 25.05.2006 11:27

Цитата:

Naked:
локаль наверное юникодная - в линуксе федоре она родная юникодная...
Наверное?? посмотреть не судьба чтоли? (комманда locale)
По умолчанию-то она юникодная, в Федоре начиная с 4 версии, да только никто же не мешает сменить, как локально, так и для конкретного соединения выбрать!

Naked 25.05.2006 17:37

Цитата:

Hubbitus:
посмотреть не судьба чтоли? (комманда locale)
вот что выдает locale:
Цитата:

LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME=C
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES=C
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=
Цитата:

Saruman:
Выполни перед их отправкой SET NAMES utf8
Такое не работает, а SET NAMES TO UTF8 выдает unrecognized configuration parameter "names"... :idontnow:

Hubbitus 26.05.2006 11:01

Ну приведи тогда вообще что БД говорит на
show VARIABLES;

Naked 26.05.2006 17:24

Цитата:

Hubbitus:
Ну приведи тогда вообще что БД говорит на
show VARIABLES;
Вот что говорит консоль
Цитата:

unrecognized configuration parameter "variables"
и то же самое говорит pgadmin (программка для работы с постгресом) :idontnow:

Kvarx 02.06.2006 23:42

Подскажите, как поменять дефолтовую кодировку для MySQL Server 5.0 по винду? Дома просто поставил. Сейчас стоит шведская, а хочется cp1251. Поигрался с настройками, что перестало к мускулу конектиться. Где надо менять?

RaZEr 03.06.2006 08:40

Цитата:

Где надо менять?
в my.cnf

Kvarx 05.06.2006 00:53

Razer
у меня в корне папке лежит my.ini, ты его имел ввиду? А как прописать нужную кодировку cp-1251, windows-1251 и тд? Я там и менял, наверно не так как-то записывал.

А то точно не надо запускать exe-шники из папки bin с каким-нибудь параметром?

Kvarx 06.06.2006 15:48

Код:

Обычно для редактирования файла опций my.ini можно использовать инструмент WinMySQLAdmin. В этом случае остальную часть данного раздела вы можете пропустить.

Существует два файла опций с одинаковыми функциями: my.cnf и my.ini. Однако во избежание недоразумений лучше всего использовать только один из них. Оба файла представляют собой простой текст. Если вы собираетесь использовать файл my.cnf, то его следует создать в корневом каталоге диска C, если my.ini - то в системном каталоге Windows (это обычно что-либо вроде C:\WINDOWS или C:\WINNT; его точное местоположение можно определить по значению переменной окружения windir). MySQL сначала ищет файл my.ini, а затем my.cnf.

Если на вашем компьютере используется начальный загрузчик, в котором диск C не является загрузочным диском, то следует работать только с файлом my.ini. Инструментальная программа WinMySQLAdmin, если она у вас применяется, также использует только файл my.ini (файл помощи с инструкциями по использованию этого инструмента находится в каталоге \mysql\bin).

Этим кусочком из мануал для MySQL4 многое сказано. У меня правда никак сервер хотел видеть только my.ini и только в своем же каталоге. Зато через mysqladmin.exe удалось поменять кодировку.

Хотя PHPMyAdmin на стартовой странице пищет, что UTF-8 Unicode (utf8), таблицы отображаются нормально.

RaZEr 06.06.2006 17:53

Кодировки бывают разные. Клиента, соединения, результата, сервера, базы, таблицы, поля. Менять кодировку сервера целесообразно лишь перед созданием баз и таблиц. Если же данные загружены (и загружены правильно) то менять нужно кодировки клиента (character_set_client, *connection и *results).


Часовой пояс GMT +4, время: 18:55.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.