2013-10-18T13:54:34 GwenDragonIst ist sinnvoll von Vornherein die Datenbank mit UTF-kodierten Daten aufzubauen.
2013-10-18T13:54:34 GwenDragon1) Was ist bei deiner MSSQL-Datenbank denn als Standardzeichensatz eingestellt? Windwos-1252?
2013-10-18T13:54:34 GwenDragon2) Wie schreibst du die Daten mit Perl in die Datenbank?
1 2 3 4
use Win32::ODBC; .... $sqlStatement = "[gespeicherte Prozedur auf dem MSSQL Server, der die Werte übergeben werden]"; $db->Sql($sqlStatement);
2013-10-18T15:16:39 GwenDragonEingabeaufforderung und Windows selbst haben unterscbhiedeliche Kodierung!
2013-10-18T15:29:13 GwenDragonDein Tipp mit Iconv: ISO-8859-15 ist da auch nicht so das Wahre unter Windows.
2013-10-18T14:15:53 biancaVielleicht ist das Codepage 850?
Text::Iconv->new('CP850','UTF-8') klappt bei solchen Dateien bei mir relativ gut. Aber in eval{} ausführen, es kann auch scheitern.
Guest AndyDeinen Tipp wollte ich heute testen, aber das Text::IConv-Modul ist nicht installiert. Muss ich erst beim Admin beantragen.
Guest AndyPS: Finde ich evtl. irgendwo einen Text etc. darüber, dass die die Kodierung des Scripts Auswirkungen hat? Ich kann mir das gar nicht vorstellen. So ein Script muss doch auf allen Rechnern/ Servern gleich laufen?!
2013-10-21T14:48:30 biancaDoch, die Kodierung des Scriptes hat Auswirkungen.
1
2
3
use Encode;
$aus_datenbank = ...;
print encode("kodierung auf der Konsole", decode("kodierung aus der DB", $aus_datenbank));
2013-10-26T09:59:06 topegJa Grundsätzlich hat die Kodierung des Scriptes keinen Einfluss auf Datensätze die gelesen/geschrieben werden. Aber schon ein $val="$string" kann perl gewaltig durcheinander bringen. Angenommen $string hat das utf8-Flag. Ohne use utf8 hat $val keines.
1
2
3
4
5
6
7
8
9
10
11
12
$ perl -wE'
use Encode;
use Devel::Peek;
my $string = decode_utf8("täst");
my $val = "$string";
Dump $val;'
SV = PV(0x186ad58) at 0x1889bc8
REFCNT = 1
FLAGS = (PADMY,POK,pPOK,UTF8)
PV = 0x1956d50 "t\303\244st"\0 [UTF8 "t\x{e4}st"]
CUR = 5
LEN = 8
perl -MEncode -MDevel::Peek -wE 'my $str1 = decode_utf8("täst"); my $str2=encode("ISO-8859-15",decode_utf8("TÜSTE")); Dump($str1); Dump($str2); my $val = "$str1$str2"; Dump $val;'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SV = PV(0x8536840) at 0x8552130
REFCNT = 1
FLAGS = (PADMY,POK,pPOK,UTF8)
PV = 0x85d7d40 "t\303\244st"\0 [UTF8 "t\x{e4}st"]
CUR = 5
LEN = 12
SV = PV(0x85d3498) at 0x85520cc
REFCNT = 1
FLAGS = (PADMY,POK,pPOK)
PV = 0x8556298 "T\334STE"\0
CUR = 5
LEN = 12
SV = PV(0x85d34b0) at 0x85d6a04
REFCNT = 1
FLAGS = (PADMY,POK,pPOK,UTF8)
PV = 0x85a6260 "t\303\244stT\303\234STE"\0 [UTF8 "t\x{e4}stT\x{dc}STE"]
CUR = 11
LEN = 12