Auf einem Server liegt eine Beispielsdatei mit 256 Bytes die mit 0x00 bis 0xFF gefüllt ist. Diese Datei wird per JavaScript:xmlHttp abgeholt. Die Ausgabe der Daten auf dem Bildschirm ergibt jedoch, dass nur die Werte 0x00 bis 0X7F korrekt übertragen wurden (siehe Anhang). Wie können, durch eine Einstellung (HTML oder JavaScript), auch die Werte von 0x80 bis 0xFF übertragen werden?
Hier ist der JavaScript-Quelltext:
1 | <html>
|
2 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
3 | <html>
|
4 | <head>
|
5 | <title>CHAR-Test 0x00 bis 0xFF</title> |
6 | </head>
|
7 | <body>
|
8 | <SCRIPT type="text/javascript"> |
9 | |
10 | var DataIn; |
11 | |
12 | function drawDiagram() |
13 | { |
14 | document.open(); |
15 | |
16 | document.write (DataIn.length, "---"); |
17 | |
18 | for (i = 0; i < 864 ; i++ ) |
19 | {
|
20 | document.write (i,":", DataIn.charCodeAt(i), " "); |
21 | }
|
22 | document.close(); |
23 | }
|
24 | |
25 | |
26 | function refresh() |
27 | {
|
28 | var xmlHttp = null; |
29 | var requeststatus = null; |
30 | try
|
31 | {
|
32 | xmlHttp = new XMLHttpRequest(); |
33 | }
|
34 | catch(e) |
35 | {
|
36 | try
|
37 | {
|
38 | xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); |
39 | }
|
40 | catch(e) |
41 | {
|
42 | try
|
43 | {
|
44 | xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); |
45 | }
|
46 | catch(e) |
47 | {
|
48 | xmlHttp = null; |
49 | }
|
50 | }
|
51 | }
|
52 | if (xmlHttp) |
53 | {
|
54 | xmlHttp.open('GET', 'http://192.168.1.90/20140126.CSV', true); |
55 | xmlHttp.onreadystatechange =
|
56 | function () |
57 | {
|
58 | if (xmlHttp.readyState == 4) |
59 | {
|
60 | DataIn = xmlHttp.responseText; |
61 | drawDiagram(); |
62 | }
|
63 | };
|
64 | |
65 | xmlHttp.send(null); |
66 | }
|
67 | }
|
68 | refresh(); |
69 | </SCRIPT> |
70 | </body>
|
71 | </html>
|
Berg schrieb: > document.write (i,":", DataIn.charCodeAt(i), " "); Bist Du Dir sicher, daß das die richtige Funktion ist, um den Wert eines einzelnen Bytes zu bestimmen? Nebenbei: Was ist das hier? Wo kommt die 864 her?! > for (i = 0; i < 864 ; i++ )
Rufus Τ. Firefly schrieb: > Berg schrieb: >> document.write (i,":", DataIn.charCodeAt(i), " "); > > > Bist Du Dir sicher, daß das die richtige Funktion ist, um den Wert eines > einzelnen Bytes zu bestimmen? Ja, zumindest für die Werte von 0x00 bis 0xFF. > Nebenbei: > > Was ist das hier? Wo kommt die 864 her?! > >> for (i = 0; i < 864 ; i++ ) Es sind 864 Bytes die vom Server kommen. Zu Testzwecken habe ich die 864 Positionen mit 0x00 bis 0xFF gefüllt. Im Anhang oben sind nur die erste 256 enthalten. Es sieht so aus, dass das Problem auf ASCII zurückzuführen ist. Daher nehme ich an, dass es z. B. durch eine HTML-Ergänzung gelöst werden kann.
Berg schrieb: > dass es z. B. durch eine HTML-Ergänzung gelöst werden kann Wenn das Binärdaten sind, ist es kein HTML und dann sollte das als Application/octet Stream gesendet werden. Dann musst du dich aber auch um die korrekte Dekodierung bei Mehrbytes etc. kümmern. Was spricht den dagegen den Server das gleich "korrekt" zu liefern? Dem Namen nach soll es ja eh eine CSV Datei sein...
Die Endung der runtergeladenen Datei ".CSV" spricht nicht gerade für Binärdaten. Welche Beschreibung schickt denn der Server im Header mit? Laut Wikipedia sollte das "text/csv" sein. Noch Fragen?
Vielen Dank für die Antworten. Ob mit der Endung CSV (content type: text/plain)oder der Endung OCT (content type application/octet), im Falle eines Aufrufs aus der Browserzeile, wird die Datei mit allen Werten (0x00 bis 0xFF) gespeichert. Bei einem Aufruf via JavaScript:xmlHttp (siehe oben) werden die Werte (0x80 bis 0xFF) nicht übertragen. Hat noch jemand einen Tipp? Wie kann ich die Daten in eine JavaScript-Variable oder -Array bekommen, so dass alle Werte von 0x00 bis 0xFF vorhanden sind?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.