Necesito obtener el carácter ASCII para cada carácter de una cadena. En realidad, es cada personaje en un archivo (pequeño). Los siguientes 3 primeras líneas de tracción con éxito todos los contenidos de un archivo en una cadena (por this recipe):Tcl para obtener el código ASCII para cada carácter en una cadena
set fp [open "store_order_create_ddl.sql" r]
set data [read $fp]
close $fp
Creo que estoy discerniendo correctamente el código ASCII de los caracteres (consulte http://wiki.tcl.tk/1497). Sin embargo, tengo un problema para encontrar la forma de recorrer todos los caracteres de la cadena.
En primer lugar, no creo que la siguiente es una forma especialmente idiomática de reproducir los caracteres en una cadena con Tcl. En segundo lugar y más importante, se comporta de manera incorrecta, insertando un elemento extra entre cada personaje.
A continuación se muestra el código que he escrito para actuar sobre los contenidos de la variable "datos" configurados anteriormente, seguidos de algunos ejemplos de salida.
CÓDIGO:
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)"
}
SALIDA:
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)
No sé nada sobre TCL, pero lo que puedo decir de la salida es que su cadena de entrada está en UTF-16, específicamente UTF-16 little-endian, no ASCII. –
Arthur, agradezco el comentario, pero estoy muy interesado en saber, * ¿cómo puedes decir eso (es UTF-16 little-endian) de la salida? –
UTF-16 usa unidades de dos bytes para codificar caracteres. Para los primeros 65536 caracteres Unicode (el denominado Plano 0), usa una de esas unidades, para el resto, usa dos (es decir, 4 bytes, pero se distinguen en dos * caracteres sustituidos * codificados cada uno en dos bytes) . Los caracteres ASCII forman los primeros 128 caracteres Unicode, por lo tanto, están codificados con dos bytes, siendo el más significativo siempre 0, el menos significativo igual al código ASCII del personaje. Aquí puede ver que a cada código ASCII le sigue un byte nulo, por lo tanto, primero tiene byte de orden mínimo, es decir, UTF-16LE. –