Thread MSSQL SELECT * liefert falsche Feldnamen (28 answers)
Opened by stefan at 2023-07-21 11:01

rosti
 2023-07-27 14:52
#195204 #195204
User since
2011-03-19
3603 Artikel
BenutzerIn
[Homepage]
user image
Hi Stefan,

der Webserver kommuniziert mit Perl über STDIN, STDOUT, das ist der Common Gateway im Sinne CGI. Auf diesem Gateway gilt die Bytesemantics, um diese sicherzustellen, setze mal:

Code (perl): (dl )
1
2
binmode STDIN;
binmode STDOUT;


in Deinem Perlscript. Evntl. ändert das was. Deine Konsole setzt ebenfalls die Bytesemantics durch, denn Ausgabe ist IO und da gilt Bytesemantics. Was Deine Konsole diesbez. macht kannst Du testen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl

use strict;
use warnings;

binmode STDIN;
binmode STDOUT;

# Ausgabe der Bytes utf8-kodiertes ä
printf("Oktetten ä: %s\n", pack("CC", 0xC3, 0xA4));

# lese STDIN
print "Lese aus der Pipe:\n";
while( read(STDIN, my $bin, 1)){
    printf "%X\n", unpack("C", $bin);
}


Code: (dl )
1
2
3
4
5
6
C:\Users\49162\Desktop>echo ä| perl pack.pl
Oktetten ä: ä
Lese aus der Pipe:
84
D
A


wobei 0xD, 0xA die Bytes für das Ende der Eingabe sind. Das 'ä' selbst wird als ein Byte mit der Wertigkeit 0x84 (dezimal 132) gelesen, UTF-8 ist das nicht sondern Codepage 850.

Guck doch mal wie das bei Dir aussieht.

PS: UTF-8 in der Windows-CMD geht übrigens so:

Code: (dl )
1
2
3
4
5
6
7
8
9
C:\Users\49162\Desktop>mode con: cp select=65001

Status von Gerät CON:
---------------------
Zeilen: 9001
Spalten: 120
Wiederholrate: 31
Verzögerungszeit:1
Codepage: 65001



Und danach sieht Ergebnis meines Scripts so aus:

Code: (dl )
1
2
3
4
5
6
7
C:\Users\49162\Desktop>echo ä|perl pack.pl
Oktetten ä: ä
Lese aus der Pipe:
C3
A4
D
A


Wenn wir das haben, können wir sicher sein daß bei einer Eingabe über die Console auch die richtigen utf-8-kodierten Oktetten im Script ankommen.
Last edited: 2023-07-27 16:54:24 +0200 (CEST)
http://blog.rolfrost.de/

The art of steam.

View full thread MSSQL SELECT * liefert falsche Feldnamen