Forum: PC-Programmierung JavaScript: Binärdatei


von Berg (Gast)


Angehängte Dateien:

Lesenswert?

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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Und wie erfolgt "die Ausgabe der Daten"?

Zeig mal Deinen js-Quelltext.

von Berg (Gast)


Lesenswert?

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>

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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++ )

von Berg (Gast)


Lesenswert?

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.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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...

von Bastler (Gast)


Lesenswert?

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?

von Berg (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.