Thread Umlaute Spreadsheet::WriteExcel (8 answers)
Opened by maart at 2016-02-03 23:14

Linuxer
 2016-02-05 17:09
#183767 #183767
User since
2006-01-27
3871 Artikel
HausmeisterIn

user image
Hi,

habe es mal selbst ausprobiert und kann das Problem nicht nachvollziehen. Wieweit das auf Deine Situation anwendbar ist, weiß ich nicht.
Dafür liegen zu wenig Informationen vor.


Ein Testskript schreibt mit aktiviertem utf8 Daten mit Umlauten in die DB. Dann liest es die Daten wieder aus der DB und gibt sie in eine Excel-Datei aus.

System: Linux
Perl: 5.10.1
DBD::SQLite: 1.31
DBI: 1.616
Spreadsheet:WriteExcel: 2.40



Wenn ich mir diese Excel-Datei anschließend anschaue, dann stimmen die Umlaute und alles wird korrekt angezeigt.

Testskript:
more (8.7kb):

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!  /opt/local/perl/bin/perl
# vim: fenc=utf-8 enc=utf-8:
use strict;
use warnings;

use utf8;
use DBI;

use Spreadsheet::WriteExcel;


my $dbfile   = 'utf8.db';
my $xlsfile  = 'utf8.xls';

my $dbh = DBI->connect(
        "dbi:SQLite:dbname=$dbfile",
        "", # no user
        "", # no pass
) or die $DBI::errstr;

$dbh->{sqlite_unicode} = 1;

$dbh->do("
CREATE TABLE IF NOT EXISTS obst (
        name    TEXT,
        desc    TEXT
);

") or die $dbh->errstr;

my $sth = $dbh->prepare(
        qq~INSERT INTO obst VALUES( "Äpfel", "lecker" );~
) or die $dbh->errstr;

$sth->execute() or die $sth->errstr;

my $xls = Spreadsheet::WriteExcel->new($xlsfile);

$sth = $dbh->prepare(
        qq~SELECT * FROM obst;~
) or die $dbh->errstr;

$sth->execute() or die $sth->errstr;

my $wb = $xls->add_worksheet( 'obst' );
$wb->write_col( 0, 0, $sth->fetchall_arrayref() );



Kodierung der Datei:
Code: (dl )
1
2
3
"sqlite_utf8.pl" 48L, 816C
encoding=utf-8
fileencoding=utf-8


Kodierung der Daten in der DB ist erkennbar am HexDump:
Code: (dl )
1
2
3
4
$ sqlite3 utf8.db 'SELECT * FROM obst' | xxd
0000000: c384 7066 656c 7c6c 6563 6b65 720a c384 ..pfel|lecker...
0000010: 7066 656c 7c6c 6563 6b65 720a c384 7066 pfel|lecker...pf
0000020: 656c 7c6c 6563 6b65 720a el|lecker.


siehe: http://www.fileformat.info/info/unicode/char/c4/in...

Den Excel-Blob spar ich mir hier.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Umlaute Spreadsheet::WriteExcel