|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Byte-order Mark
Always prefix a Unicode plain text file with a byte-order mark. Because Unicode plain text is a sequence of 16-bit codes, it is sensitive to the byte ordering used when the text was written.
A byte-order mark is not a control character that selects the byte order of the text; it simply informs an application receiving the file that the file is byte ordered. Ideally, all Unicode text would follow only one set of byte-ordering rules. This is not possible, however, because microprocessors differ in the position of the least significant byte: Intel® and MIPS® processors have the least significant byte first; Motorola processors (and byte-reversed Unicode files) have it last. With only a single set of byte-ordering rules, users of one type of microprocessor would be forced to swap the byte order every time a plain text file is read from or written to, even if the file is never transferred to another system based on a different microprocessor.
The preferred place to specify byte order is in a file header, but text files do not have headers. Therefore, Unicode has defined a character (0xFEFF) and a noncharacter (0xFFFE) as byte-order marks. They are mirror byte-images of each other. Since the sequence 0xFEFF is exceedingly rare at the outset of regular non-Unicode text files, it can serve as an implicit marker or signature to identify the file as a Unicode file. Applications written to read both Unicode and non-Unicode text files should use the presence of this sequence as a near-certain indicator that the file is a Unicode file. (Compare this technique to using the MS-DOS EOF marker to terminate text files.)
When an application finds 0xFEFF at the beginning of a text file, it typically processes the file as though it were a Unicode file, although it may also perform further heuristic checks to verify that this is true. Such a check could be as simple as a test of whether the variation in the low-order bytes is much higher than the variation in the high-order bytes. For example, if ASCII text is converted to Unicode text, every second byte is zero. Also, checking both for the linefeed and carriage-return characters (0x000A and 0x000D) and for even or odd file size can provide a strong indicator of the nature of the file.
When an application finds 0xFFFE at the beginning of a text file, it interprets it to mean the file is a byte-reversed Unicode file. The application can either swap the order of the bytes or alert the user that an error has occurred. The Unicode byte-order mark character is not found in any code page, so it disappears if data is converted to ANSI. Unlike other Unicode characters, it is not replaced by a default character when it is converted. If a byte-order mark is found in the middle of a file, it is not interpreted as a Unicode character and has no effect on text output.
The Unicode value 0xFFFF is illegal in plain text files and cannot be passed between Windows functions. The value 0xFFFF is reserved for an application's private use.
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Байтовый порядок Отметки
Всегда префикс файл простого текста Уникода с байтовым порядком отметки. Поскольку простой текст Уникода является последовательностью 16- битовых кодов, он чувствительный к байту, заказывающему использованное когда текст был написан.
Байтовый порядок отметки не является управляющим символом, который выбирается байтовый порядок текста; это просто сообщает приложение, получающее файл, что файл является байтом заказанным. Умозрительно, весь текст Уникода должен последовать за только один установленное байтового упорядочения правил. Не возможно, тем не менее, поскольку микропроцессоры отличаются в позиции наименее значимого байта: Intel и MIPS процессоры имеют наименее значимый байт сначала; Процессоры Motorola (и возобновившее байтовые файлы Уникода), иметь это последний раз. С только единственной установкой байтового упорядочения правил, пользователи одного типа микропроцессора должны быть вынуждены подкачивать байтовый порядок каждый раз, который файл простого текста прочитан из или записанное на, даже если бы файл никогда не передан в другую систему основанную на другом микропроцессоре.
Предпочтительное место, чтобы определять что байтовый порядок - в файловом заголовке, но текстовые файлы нет имеют заголовки. Следовательно, Уникод определил символ (0xFEFF) и noncharacter (0xFFFE) как байтовый порядок отметок. Они - зеркальные байтовые-образы друг друга. С тех пор как последовательность 0xFEFF чрезвычайно редкая в начале регулярных не-текстовых файлов Уникода, она может послужить в качестве подразумевающегося маркера или сигнатуры, чтобы идентифицировать файл как файл Уникода. Приложения записанные, чтобы читать как Уникод так и не-текстовые файлы Уникода должны использовать присутствие этой последовательности как near-определенный указатель, что файл является файлом Уникода. (Сравните эту технику с использованием маркера МС-DOS EOF, чтобы завершать текст files.)
Когда приложение находит 0xFEFF в начале текстового файла, оно обычно обрабатывает файл как если бы это было файлом Уникода, хотя это может также выполнить дальнейшие эвристические чеки, чтобы проверять, что это - истина. Такой чек мог быть таким же прост как тест независимо изменения в младших байтах значительно выше чем изменение в старших байтах. Например, если текст ASCII преобразован в текст Уникода, каждый байт секунды нулевой. Также, проверяя как на наличие перевода строки так и перевозка-обратные символы (0x000A и 0x000D) и для ровного или нечетного файлового размера может обеспечить прочный указатель природы файла.
Когда приложение находит 0xFFFE в начале текстового файла, оно интерпретирует это, чтобы означать что файл является обратным байтовым файлом Уникода. Приложение может или подкачивать порядок байтов или предупреждать пользователя, который ошибка произошла. Отметка Уникода байтового символа порядка не обнаружена на любой кодовой странице, так что это исчезает если данные преобразованы на ANSI. В отличие от других символов Уникода, это не заменено по умолчанию символом когда преобразовано. Если байтовый порядок отметки обнаружен в середине файла, он не интерпретирован как символ Уникода и не имеет эффект на текстовом выходе.
Величина Уникода 0xFFFF незаконная в файлах простого текста и не мочь быть пройдено между функциями Windows. Величина 0xFFFF зарезервирована для прикладного частного использования.
|
|
|
|
| |