FS (File Separator) is ASCII code point 28 (0x1C), Unicode U+001C. It is a C0 control character that marked the boundary between distinct files or top-level data groups in a serial stream — the highest-level delimiter in ASCII's four-tier separator hierarchy: US (0x1F), RS (0x1E), GS (0x1D), FS (0x1C). On teleprinter and early batch-processing systems, 0x1C let a single tape or transmission carry multiple logical files without requiring external framing. Today it occasionally appears in legacy EDI formats and flat-file data interchange where lightweight record boundaries are preferred over heavier markup. UTF-8 encodes it as the single byte 0x1C; Unicode classifies it as Cc (Control) with the alias FILE SEPARATOR.
char msg[] = "A\x1CB\x1CC"; // FS (0x1C) separates frameschar *p = msg;for (int i = 0; i < 3; i++) { char *fs = strchr(p, 0x1C); if (fs) *fs = '\0'; p = fs ? (fs + 1) : p; } // split in-place
FS (ASCII 28) was designed to separate files or major data sections within a single byte stream. In the hierarchy of ASCII separators, FS is the highest-level delimiter — bigger than Group, Record, or Unit separators.
They were the original structured data format. FS/GS/RS/US formed a four-level hierarchy for organizing data — essentially a proto-CSV/JSON system from the 1960s. Modern formats replaced them with visible delimiters, tags, or length-prefixed frames.
Because FS is invisible and non-printable — you can't see or type it easily. CSV won because commas are human-readable. Ironically, FS would actually be better technically since it can't appear in normal text, avoiding the quoting nightmare CSVs create.
Occasionally. Some data interchange formats, mainframe data exports, and industrial systems still use ASCII separator characters. If you're parsing data and see byte 0x1C, check whether it's being used as a structured delimiter before stripping it.