[dancer-users] Help with Dancer2 and Oracle DB, please. Problem with encoding

Козицкий Сергей kce at tut.by
Thu Feb 20 14:49:35 GMT 2014

I am beginner in Dancer. Help me please.

I am having database on Oracle 10g. Web server and Oracle Client is working
under openSUSE 12.3. DB data encoding is Windows-1251 (I can't change this).
I have set system environment variable NLS_LANG =
AMARICAN_AMERICA.CL8MSWIN1251. I am constantly workin with Perl and Oracle
DB and always do so.
My system console character set in openSUSE is UTF-8.

But after select I get the data in a double byte character set (I looked in
log). And this is not UTF-8. Why? What am I doing wrong?

My config.yml:

appname:    "AAA"
server:     ""
port:       8008
layout:     "main"
charset:    "UTF-8"
template:   "simple"
logger:     "file"
serializer: "JSON"
        driver:     "Oracle"
        host:       ""
        sid:        "DEVDB"
        username:   "A"
        password:   "AAA"
        log_queries: 1
        auto_utf8:   0
            AutoCommit: 1
            RaiseError: 1
            PrintError: 0
            PrintWarn:  0

My simple application for test:


use v5.16;
use utf8;
use Dancer;
use Dancer::Plugin::Database;

get '/' => sub {
    var time => scalar(localtime);
    my $tst_set = database->selectcol_arrayref('SELECT label FROM et_list
WHERE tbl=1 AND gr=3');
    my $S;
    foreach  (@{$tst_set}) {
        my $s = $_;
        $S.= "$s<br>";
    template 'test.tt', { test => $S };

In the browser, I see a clumsy unreadable text. :-(
I have tried add - Encode::from_to($s, 'cp-1251', 'utf-8'); - another clumsy
unreadable text
Encoding in the HTML set as UTF-8.

I have wrote simple perl script for test and run it from openSUSE system

use v5.16;
use strict;
use DBI;

my $DB_Server   ='';
my $DB_SID      ='DEVDB';
my $DB_User     ='A';
my $DB_Pass     ='AAA';

my $dbh;
             $DB_User, $DB_Pass, {
                                    AutoCommit  =>0,
                                    RaiseError  =>1,
                                    PrintError  =>0,
                                    PrintWarn   =>0
}; if ($@) {
    die "Connection error: $@"
my $tst_set = $dbh->selectcol_arrayref('SELECT label FROM et_list WHERE
tbl=1 AND gr=3');

say join("\n", @{$tst_set});


An this work. All OK

I nothing understand.  Help me please.

PS. I have tried run this Dancer application under Windows-7 ( Dancer 1).
It's working OK
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.preshweb.co.uk/pipermail/dancer-users/attachments/20140220/1b49a756/attachment.html>

More information about the dancer-users mailing list