Canonicalization  In computer science, canonicalization (sometimes standardization or normalization) is a process for converting data that has more than one possible representation into a "standard", "normal", or canonical form. This can be done to compare different representations for equivalence, to count the number of distinct data structures, to improve the efficiency of various algorithms by eliminating repeated calculations, or to make it possible to impose a meaningful sorting order. Files in file systems may in most cases be accessed through multiple filenames. For instance in Unix-like systems, the string codice_1 can be replaced by codice_2. In the C standard library, the function codice_3 performs this task. Other operations performed by this function to canonicalize filenames are the handling of codice_4 components referring to parent directories, simplification of sequences of multiple slashes, removal of trailing slashes, and the resolution of symbolic links. Canonicalization of filenames is important for computer security. For example, a web server may have a restriction that only files under the cgi directory codice_5 may be executed. This rule is enforced by checking that the path starts with codice_6 and only then executing it. While the file codice_7 initially appears to be in the cgi directory, it exploits the codice_8 path specifier to traverse back up the directory hierarchy in an attempt to execute a file outside of codice_9. Permitting codice_10 to execute would be an error caused by a failure to canonicalize the filename to the simplest representation, codice_11, and is called a directory traversal vulnerability. With the path canonicalized, it is clear the file should not be executed. In Unicode, many accented letters can be represented in more than one way. For example, "é" can be represented in Unicode as the Unicode character U+0065 (LATIN SMALL LETTER E) followed by the character U+0301 (COMBINING ACUTE ACCENT), but it can also be represented as the precomposed character U+00E9 (LATIN SMALL LETTER E WITH ACUTE). This makes string comparison more complicated, since every possible representation of a string containing such glyphs must be considered. To deal with this, Unicode provides the mechanism of canonical equivalence. In this context, canonicalization is Unicode normalization. Variable-width encodings in the Unicode standard, in particular UTF-8, may cause an additional need for canonicalization in some situations.