JavaScript: Binärdatei

Gast #3504872
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?
Angehängte Dateien:
Gast
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>
Gast
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.
Persönliche Seite
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...
Gast
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?
Gast
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?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.