Tcl-für immer der ASCII-code für jedes Zeichen in einem string

Ich brauche, um das ASCII-Zeichen für jedes Zeichen in einem string. Eigentlich ist es jedem Charakter eine (kleine) Datei. Die folgenden ersten 3 Zeilen erfolgreich ziehen Sie den Inhalt einer Datei in eine string - (pro dieses Rezept):

set fp [open "store_order_create_ddl.sql" r]
set data [read $fp]
close $fp

Ich glaube, ich bin richtig anspruchsvoll der ASCII code für das Zeichen (siehe http://wiki.tcl.tk/1497). Aber ich habe ein problem, herauszufinden, wie, um eine Schleife über jedes Zeichen in der Zeichenfolge.

Erstens glaube ich nicht, das folgende ist ein besonders idiomatischer Weise zum Durchlaufen von Zeichen in einem string mit Tcl. Zweitens und noch wichtiger ist, es verhält sich falsch, können Sie ein zusätzliches element zwischen den einzelnen Zeichen.

Unten ist der code, den ich geschrieben habe zu handeln, die den Inhalt des "data" - variable oben gesetzt, gefolgt von einigen Beispiel-Ausgabe.

CODE:

for {set i 0} {$i < [string length $data]} {incr i} {
  set char [string index $data $i]
  scan $char %c ascii
  puts "char: $char (ascii: $ascii)"
}

AUSGABE:

char: C (ascii: 67)
char:  (ascii: 0)
char: R (ascii: 82)
char:  (ascii: 0)
char: E (ascii: 69)
char:  (ascii: 0)
char: A (ascii: 65)
char:  (ascii: 0)
char: T (ascii: 84)
char:  (ascii: 0)
char: E (ascii: 69)
char:  (ascii: 0)
char:   (ascii: 32)
char:  (ascii: 0)
char: T (ascii: 84)
char:  (ascii: 0)
char: A (ascii: 65)
char:  (ascii: 0)
char: B (ascii: 66)
char:  (ascii: 0)
char: L (ascii: 76)
char:  (ascii: 0)
char: E (ascii: 69)
  • Sie wissen nichts über die TCL -, aber was ich sagen kann, Sie aus der Ausgabe ist, dass Ihr input-string im UTF-16, speziell UTF-16 little-endian, nicht ASCII.
  • Arthur, ich über die Bemerkung, aber ich bin sehr daran interessiert zu wissen, wie können Sie sagen, dass (es ist UTF-16 little-endian) aus der Ausgabe?
  • UTF-16 verwendet zwei-byte-Einheiten zum Kodieren von Zeichen. Für die ersten 65536 Unicode-Zeichen (die sogenannte Ebene 0), verwendet es eins von diesen Einheiten, für alle anderen, es verwendet zwei (d.h. 4 bytes, sondern unterschieden sich in zwei Ersatzzeichen kodiert jeweils auf zwei bytes). Die ASCII-Zeichen, die ersten 128 Unicode-Zeichen, daher sind Sie verschlüsselt, wobei zwei bytes, das wichtigste ist immer 0, die niederwertigen gleich das Zeichen ist im ASCII-code. Hier sehen Sie, dass jedes ASCII-code, gefolgt von einem null byte, folglich sind Sie mit mindestens-order-byte zuerst, also UTF-16LE.
  • Danke Arthur, das ist übersichtlicher als die Wikipedia-Artikel, die ich sah in der Zwischenzeit aus!
  • Arthur, bitte betrachten Sie dieses schreiben als Antwort, sondern als Kommentar, und ich werde sicherlich upvote und auch wahrscheinlich annehmen; so können Sie gewinnen einen guten Ruf für Ihre Eingabe.
  • PS...die Art, wie dieser zustande kam, war für mich, dass ich tatsächlich versuchen, durchsuchen Sie die Ausgabe mit PHP aber segfaults aufgetreten beim Versuch, die tokenisierung der Daten. Mit PHP habe ich festgestellt, dass es interne null-Zeichen, und ich dachte, es könnte zu tun haben mit der übertragung der Datei zunächst via Remote-Desktop und dann per SCP. Ich Schloss die letztere, so dass, um zu versuchen, um sicherzustellen, dass es war nicht, weil a) PHP und b) die übertragung über Remote Desktop habe ich dann hochgeladen TCLKit zum remote-desktop, so dass ich versuchen könnte, mit einer anderen Sprache, die direkt auf dem Rechner mit dem SQL-bekam generiert.

Schreibe einen Kommentar