psql=# create database novels owner ron encoding 'UTF8'; #### "author","category","title","rating","comment","isbn","publisher","publication_date","review_date" "Colm Tóibín","Novel","The South","***","-","-","Picador","-","2012-06-12" #### use feature 'unicode_strings'; use open qw/:std :utf8/; ... # DBIx::Class: my($rs) = $schema -> resultset('Author'); my($result); for (sort keys %$data) { $result = $rs -> create({name => $_, upper_name => uc $_}); } #### novels=# select * from authors where name like 'Colm%'; id | name | upper_name -----+-------------+------------- 100 | Colm Tóibín | COLM TóIBíN (1 row) #### use feature qw/say unicode_strings/; use open qw/:std :utf8/; use Encode qw/decode encode/; ... my($row) = $sth -> fetchall_hashref('id'); my($name) = $$row{100}{name}; my($decode) = decode('utf8', $name); my($json) = JSON::XS -> new -> utf8(0) -> encode({name => $decode}); say "name: $name."; say "decode: $decode."; say "json: $json."; #### ron@zigzag:~/perl.modules/Local-Novels$ perl scripts/test.utf8.pl name: Colm Tóibín. decode: Colm Tóibín. json: {"name":"Colm Tóibín"}. #### #### use feature 'unicode_strings'; use Encode 'decode'; ... while (my $item = $rs -> next) { push @$result, { author_name => decode('utf8', $item -> author -> name), ... } } ... $output = {results => $result}; return JSON::XS -> new -> utf8(0) -> encode($output); #### return JSON::XS -> new -> utf8(1) -> encode($output);