2009-09-16 11 views
10

Muchos idiomas tienen funciones que solo procesan "texto plano", no binario. ¿Esto significa que solo se permitirán caracteres dentro del rango ASCII?¿Cuál es la diferencia entre texto sin formato y datos binarios?

Binario es solo una serie de bytes, ¿no es similar al texto plano, que es solo una serie de bytes interpretados como caracteres? Entonces, ¿puede el texto plano almacenar los mismos formatos de datos/protocolos como binarios?

+4

Para su información, no existe el texto sin formato. http://www.joelonsoftware.com/articles/Unicode.html – harpo

+0

Para su información, texto plano en este contexto no es UTF-8 y no puede representar Unicode, porque como he dicho antes, es una serie de bytes, nada más elegante. –

+0

Supongo que estaba siendo un poco sarcástico. Después de todo, incluiste las comillas aéreas sobre "texto plano". – harpo

Respuesta

3

Uno Lo que a menudo significa es que el lenguaje puede sentirse libre de interpretar ciertos caracteres de control, como los valores 10 o 13, como terminadores de línea lógica. En otras palabras, una operación de salida podría agregar automáticamente estos caracteres al final, y una operación de entrada podría quitarlos de la entrada (y/o terminar la lectura allí). Por el contrario, las operaciones de E/S de idioma que anuncian trabajar con datos "binarios" generalmente incluirán un parámetro de entrada para la longitud de datos en que operar, ya que no hay otra manera (salvo leer el final del archivo). para saber cuándo está hecho.

+0

Supongamos que la función a la que estoy suministrando texto plano, la toma como una cadena. ¿No puede medir la longitud antes de la transmisión, en lugar de depender de los caracteres de control? –

+2

Eso depende del idioma. En Ada, certianly. En C, la única manera de hacerlo es buscar un terminador de línea (ASCII 0). Eso significa que no puede generar ese valor en un archivo utilizando rutinas de E/S "ASCII", pero puede utilizar las rutinas "binarias" basadas en la longitud. –

+0

Claro, y podría agregar un carácter de control (como \ r \ n), o incluso hacer conversiones de conjunto de caracteres a esa cadena, si los datos se tratan como binarios, no se agregaría o alteraría nada. – nos

6

un texto plano es legible por humanos, un archivo binario generalmente no se puede leer por un humano, ya que está compuesto de caracteres imprimibles y no imprimibles.

Intente abrir un archivo jpeg con un editor de texto (por ejemplo, bloc de notas o vim) y comprenderá lo que quiero decir.

Un archivo binario generalmente se construye de una manera que optimiza la velocidad, ya que no se necesita un análisis sintáctico. Un archivo de texto plano es editable a mano, no es un archivo binario.

+10

Jon Skeet puede leer archivos binarios. –

+0

Espero que este sea el comienzo de las bromas de Jon Skeet al estilo de Chuck Norris. – JMP

+0

Chuck Norris puede leer archivos binarios directamente de la fuente. – fbrereto

4

"Texto sin formato" puede tener varios significados.

El más útil en este contexto es que no es más que un archivo binario organizado en secuencias de bytes que un sistema de computadoras en particular puede traducir en un conjunto finito de lo que considera caracteres de "texto".

Un segundo significado, algo conectado, es la restricción de que dicho sistema debería mostrar estos "caracteres de texto" como símbolos legibles por un ser humano como miembros de un alfabeto reconocible. A menudo, la implicación no escrita es que el mecanismo de traducción es ASCII.

Un tercer significado, incluso más restrictivo, es que este sistema debe ser un editor/visor de texto "simple". Por lo general, implica codificación ASCII. Pero, realmente, hay MUY poca diferencia entre usted, el humano, leyendo texto codificado en algún formato funky y mostrado por un programa propietario, contra el editor de texto VI que lee el archivo codificado en ASCII.

dentro del contexto de programación, el entorno de programación (comprized mediante las API del sistema operativo + + Sistema de sus capacidades lingüísticas) define tanto un conjunto de caracteres de "texto", y un conjunto de codificaciones que es capaz de leer para convertir a estos " texto "personajes". Tenga en cuenta que esto puede no implicar necesariamente ASCII, inglés u 8 bits: como ejemplo, Perl puede leer de forma nativa y usar el conjunto completo de "caracteres" de Unicode.

Para responder a su pregunta específica, definitivamente puede usar cadenas de "caracteres" para transmitir secuencias de bytes arbitrarias, con la advertencia de que deben aplicarse las convenciones de terminación de cadena. El problema es que las funciones que ya existen para "procesar datos de caracteres" probablemente no tengan ninguna funcionalidad útil para tratar con sus datos binarios.

3

Generalmente, depende del idioma/entorno/funcionalidad.

Los datos binarios son siempre eso: binarios. Se transfiere sin modificaciones.

modo "Texto sin formato" puede significar una o más de las siguientes cosas:

  • el flujo de bytes se divide en líneas. Los delimitadores de línea son \ r, \ n, o \ r \ n, o \ n \ r. A veces depende del sistema operativo (como * nix likes \ n, mientras que windows le gusta \ r \ n). La terminación de línea se puede ajustar para la aplicación de lectura
  • codificación de caracteres puede ajustarse.El medio ambiente puede detectar y/o convertir la codificación de origen en la codificación de la aplicación espera probablemente algunas otras conversiones, debe añadirse a esta lista
  • , pero no puedo pensar en nada más en este momento
2

Técnicamente nada. El texto simple es una forma de datos binarios. Sin embargo, una gran diferencia es cómo se almacenan los valores. Piensa en cómo se puede almacenar un entero. En datos binarios usaría un formato de complemento de dos, probablemente tomando 32 bits de espacio. En formato de texto, un número se almacenaría en su lugar como una serie de dígitos Unicode. Entonces el número 50 se almacenará como 0x32 (rellenado para tomar 32 bits) en binario, pero se almacenará como '5' '0' en texto sin formato.

Cuestiones relacionadas