Проблема с отображением русского UTF8 текста в UI

Обсуждаем вопросы добавления новой функциональности, патчей и исправления багов

Проблема с отображением русского UTF8 текста в UI

СообщениеАвтор: nite_man окт 8th, '09, 15:59

Проблемы с добавление русского языка в LinuxMCE продолжаются. После перевода базы данных, таблицы Text_LS и поля Description в UTF8 обнаружилось, что Орбитер вместо русского текста показывает вопросительные знаки. После недолгого ресерча нашел указание на то, что клиент перед коннектом должен указать кодировку, используемою для соединения. По умолчанию используется latin1 несмотря на UTF8 настройки сервера в файле my.cnf. Однако я всеже нашел, как указать эту самую кодировку. Дело в том, LinuxMCE использует MySQL C API для взаимодействия с базой данных. А там есть функция mysql_options(), с помощью которой можно указать кодировку по умолчанию:
Код: Выделить все
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, 'utf8');

и выполнить SQL команду сразу после подключения к серверу:
Код: Выделить все
mysql_options(&mysql,MYSQL_INIT_COMMAND, 'SET NAMES utf8');

Вызывать эту функцию нужно сразу после вызова mysql_init() и перед mysql_connect() или mysql_real_connect(). Однако добавление опции UTF8 результата не дало - русский текс так и показывается вопросительными знаками.

Для подтверждения того, что в базе русский текст лежит в UTF8 написал простой перловый скрипт:
Код: Выделить все
#!/usr/bin/perl -w

use strict;
use warnings;
use utf8;

binmode STDOUT, ":utf8";

use DBI;
use Data::Dumper;

my $db_host = 'localhost';
my $db_name = 'pluto_main';
my $db_user = 'root';
my $db_pass = '';

my $dbh = DBI->connect("dbi:mysql:$db_name;host=$db_host", $db_user, $db_pass) or die "Cannot connect to $db_name: $DBI::err!";

$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');

my $query = "SELECT FK_Text, Description FROM Text_LS WHERE FK_Language=5";
my $res = $dbh->prepare($query) or die "Cannot prepare query: $DBI::err!";
my $rv = $res->execute() or die "Cannot execute query: $DBI::err!";
my $result = $res->fetchall_arrayref({});

my $count = 0;
for my $row (@$result) {
    my $msg = $row->{Description};
    print "$row->{FK_Text}: " . $msg . "\n";
}

$dbh->disconnect();


Весь русский текс в выводе скрипта отображается правильно. Но если закомментировать строчки
Код: Выделить все
$dbh->{'mysql_enable_utf8'} = 1;
$dbh->do('SET NAMES utf8');

то вместо русских букв выводятся вопросительные знаки. Отсюда делаю вывод, что что-то в с-шном клиенте не доделал или сделал не правильно. Если у кого есть опыт работы с UFT8 базами данных из C++ приложения на Линуксе, просьба поделиться опытом, чтобы в конце концов решить эту проблему.
Аватара пользователя
nite_man
Site Admin
 
Сообщения: 495
Регистрация: авг 18th, '08, 21:53
Откуда: Лимассол, Кипр

Re: Проблема с отображением русского UTF8 текста в UI

СообщениеАвтор: nite_man окт 9th, '09, 12:21

Решение этой проблемы найдено. Причем код менять совсем не нужно. Достаточно добавить следующие строки в my.cnf файл в секцию mysqld:
Код: Выделить все
init_connect='SET NAMES utf8; SET collation_connection = utf8_general_ci;'
default-character-set=utf8                                               
character-set-server=utf8                                                 
collation-server=utf8_general_ci                                         
skip-character-set-client-handshake 


Самая первая опция init_connect собственно и заменяет вызов функции
Код: Выделить все
mysql_options(&mysql,MYSQL_INIT_COMMAND, 'SET NAMES utf8');

Очень важной опцией является skip-character-set-client-handshake, которая говорит серверу игнорировать запрос на установку кодировки от клиентского приложения. В результате клиент будет получать данные в дефолтной кодировке сервера.

Данный солюшен уже проверил на тестовой системе. Русский текст в Орбитере показывается правильно!
Аватара пользователя
nite_man
Site Admin
 
Сообщения: 495
Регистрация: авг 18th, '08, 21:53
Откуда: Лимассол, Кипр

Re: Проблема с отображением русского UTF8 текста в UI

СообщениеАвтор: ihaar фев 15th, '10, 00:14

а у меня такая проблема:
на сервере всё в порядке с кириллицей, имена файлов, епг, вдр - всё отображается
а вот на мд не хочет. причём в окне выбора видео файлов всё нормально, а вот в самом кде и вдр вопросы вместо кириллицы
ihaar
Гость
 
Сообщения: 74
Регистрация: авг 30th, '09, 00:06
Откуда: Минск, Беларусь

Re: Проблема с отображением русского UTF8 текста в UI

СообщениеАвтор: nite_man фев 15th, '10, 01:04

Странно это. По идее должно быть все нормально с русским. Так как база одна и таже используется. А локаль какая на МД?
Аватара пользователя
nite_man
Site Admin
 
Сообщения: 495
Регистрация: авг 18th, '08, 21:53
Откуда: Лимассол, Кипр

Re: Проблема с отображением русского UTF8 текста в UI

СообщениеАвтор: ihaar фев 15th, '10, 22:11

действительно, не установил русский.. в KDE это проблему решило, имена файлов отображает корректно.
но вот с VDR проблема осталась. вместо ??? в именах каналов и названиях программ теперь квадратики :?
причём в настройках OSD русский выбирается нормально и все менюшки в кириллице отображаются нормально.
уже проверил и сравнил все настройки вдр на сервере и на мд. вроде всё идентично, однако на сервере всё ок, а на мд..
ihaar
Гость
 
Сообщения: 74
Регистрация: авг 30th, '09, 00:06
Откуда: Минск, Беларусь

Re: Проблема с отображением русского UTF8 текста в UI

СообщениеАвтор: nite_man фев 16th, '10, 10:51

Странно. Может streamdev как-то тоже настраивать нужно. А не показываются имена каналов в OSD? А какая кодировка channels.conf на МД? VDR же от туда напрямую названия каналов дергает, если я ничего не путаю. А EPG как показывается?
Аватара пользователя
nite_man
Site Admin
 
Сообщения: 495
Регистрация: авг 18th, '08, 21:53
Откуда: Лимассол, Кипр

Re: Проблема с отображением русского UTF8 текста в UI

СообщениеАвтор: ihaar фев 16th, '10, 12:17

имена каналов в OSD и название передач показываются, но некрректно. собсна в этом и проблема.
конфиг скопирован с сервера, так что кодировка такая же. такое впечатление, что это VDR не распознаёт кодировку инфы идущую в потоке с сервера.
я не знаю как точно называется менюшка вызываемая клавишей f6, но похоже она чисто MCEшная и там каналы и передачи показываются нормально. где-то в самом VDR на мд проблема
ihaar
Гость
 
Сообщения: 74
Регистрация: авг 30th, '09, 00:06
Откуда: Минск, Беларусь

Re: Проблема с отображением русского UTF8 текста в UI

СообщениеАвтор: ihaar фев 17th, '10, 22:15

ну вот опять :mrgreen:
ничего не делал с момента предыдущего поста, а сегодня обновился и после апгрейда проблема исчезла сама собой.. есть кириллица в vdrовских OSD и EPG на МД
ihaar
Гость
 
Сообщения: 74
Регистрация: авг 30th, '09, 00:06
Откуда: Минск, Беларусь

Re: Проблема с отображением русского UTF8 текста в UI

СообщениеАвтор: nite_man фев 17th, '10, 23:35

А что за пакеты обновились? Может streamdev глючил или vdr-обертка на МД.
Аватара пользователя
nite_man
Site Admin
 
Сообщения: 495
Регистрация: авг 18th, '08, 21:53
Откуда: Лимассол, Кипр

Re: Проблема с отображением русского UTF8 текста в UI

СообщениеАвтор: ihaar фев 18th, '10, 00:37

установился комплект Update 2010-02-16 - 22777
включающий обновления
* pluto-std-plugins (116,135)
* pluto-vdr (468,469)
* pluto-system-database (211)
* Hulu PlugIn (737,738)
* Hulu Player (739,740)
(взято с wiki)
ihaar
Гость
 
Сообщения: 74
Регистрация: авг 30th, '09, 00:06
Откуда: Минск, Беларусь


Вернуться в Девелопмент

Кто сейчас на конференции

Сейчас этот форум просматривают: в настоящее время на конференции нет зарегистрированных пользователей и гости: 0

cron