В чем разница между UTF-8 и UTF-8 без спецификации?

Сделайте следующее изменение в файле jquery.validationengine-en.js и обновите встроенную проверку dd / mm / yyyy, включив високосный год:

"date": {
    // Check if date is valid by leap year
    "func": function (field) {
    //var pattern = new RegExp(/^(\d{4})[\/\-\.](0?[1-9]|1[012])[\/\-\.](0?[1-9]|[12][0-9]|3[01])$/);
    var pattern = new RegExp(/^(0?[1-9]|[12][0-9]|3[01])[\/\-\.](0?[1-9]|1[012])[\/\-\.](\d{4})$/);
    var match = pattern.exec(field.val());
    if (match == null)
    return false;

    //var year = match[1];
    //var month = match[2]*1;
    //var day = match[3]*1;
    var year = match[3];
    var month = match[2]*1;
    var day = match[1]*1;
    var date = new Date(year, month - 1, day); // because months starts from 0.

    return (date.getFullYear() == year && date.getMonth() == (month - 1) && date.getDate() == day);
},
"alertText": "* Invalid date, must be in DD-MM-YYYY format"
744
задан cpx 22 December 2018 в 00:21
поделиться

7 ответов

Спецификация UTF-8 - это последовательность байтов в начале текстового потока (EF BB BF), которая позволяет читателю более надежно угадать файл в кодировке UTF-8.

Обычно спецификация используется для обозначения порядка байтов кодирования, но поскольку порядок байтов не имеет отношения к UTF-8, в спецификации нет необходимости.

Согласно стандарту Unicode , спецификация для файлов UTF-8 не рекомендуется :

2.6 Схемы кодирования

... Использование спецификации не является ни тем, ни другим не требуется и не рекомендуется для UTF-8, но может встречаться в контекстах, где данные UTF-8 конвертируются из других форм кодирования, которые используют BOM, или где BOM используется как UTF-8 подпись. См. Подраздел «Знак порядка байтов» в Раздел 16.8, Специальные , для получения дополнительной информации.

738
ответ дан 22 November 2019 в 21:21
поделиться

Вот мой опыт с Visual Studio, SourceTree и запросами получения по запросу Битоприемника, который давал мне некоторые проблемы:

Так оказывается, что BOM с подписью будет включать красный точечный символ в каждый файл при рассмотрении запроса получения по запросу (может быть довольно раздражающим).

enter image description here

, Если Вы толпитесь на нем, это покажет символ как "ufeff", но оказывается, что sourcetree не делает показывает эти типы bytemarks, таким образом, это, скорее всего, закончится в Ваших запросах получения по запросу, которые должны быть в порядке, потому что это - то, как VS, 2017 кодирует новые файлы теперь, поэтому возможно, битоприемник, должен проигнорировать это или заставить его показать в другом отношении, больше информации здесь:

Красный точечный маркер представление разности BitBucket

0
ответ дан 22 November 2019 в 21:21
поделиться

С http://en.wikipedia.org/wiki/Byte-order_mark:

Знак заказа байтов (BOM) является уникодом. символ, используемый для сигнала эндианность (порядок байт) текстового файла или ручей. Его точка кода - U+FEFF. Использование BOM является необязательным, и, если используется, должен появиться в начале текста ручей. Помимо его специфического использования в качестве индикатор порядка байтов, запоминающее устройство символ может также указывать на то, какой из несколько представлений Юникода текст закодирован.

Постоянное использование BOM в вашем файле гарантирует, что он всегда откроется корректно в редакторе, поддерживающем UTF-8 и BOM.

Моя реальная проблема с отсутствием BOM заключается в следующем. Предположим, у нас есть файл, который содержит:

abc

Без BOM он открывается как ANSI в большинстве редакторов. Поэтому другой пользователь этого файла открывает его и добавляет некоторые нативные символы, например:

abg-αβγ

Oops.... Теперь файл все еще в ANSI и угадайте, что "αβγ" занимает не 6 байт, а 3. Это не UTF-8, и это вызывает другие проблемы позже в цепочке разработки.

1
ответ дан 22 November 2019 в 21:21
поделиться

UTF-8 без запоминающего устройства не имеет запоминающего устройства, что не делает его лучше, чем UTF-8 с запоминающим устройством, за исключением случаев, когда потребителю файла необходимо знать (или было бы полезно знать), является ли файл в кодировке UTF-8 или нет.

BOM обычно полезен для определения эндианности кодировки, которая не требуется для большинства случаев использования.

Кроме того, BOM может быть ненужным шумом/краской для тех потребителей, которые не знают или не заботятся об этом, и может привести к путанице пользователей.

7
ответ дан 22 November 2019 в 21:21
поделиться

Цитируется внизу страницы Википедии в спецификации: http://en.wikipedia.org/wiki/Byte-order_mark#cite_note- 2

«Использование спецификации не требуется и не рекомендуется для UTF-8, но может встречаться в контекстах, где данные UTF-8 преобразуются из других форм кодирования, которые используют спецификацию, или где спецификация используется как UTF- 8 подпись "

7
ответ дан 22 November 2019 в 21:21
поделиться

В других отличных ответах уже было сказано, что:

  • Официальной разницы между UTF-8 и UTF-8 в спецификации нет
  • A BOM -ed Строка UTF-8 начинается с трех следующих байтов. EF BB BF
  • Эти байты, если они есть, должны игнорироваться при извлечении строки из файла / потока.

Но, как дополнительная информация к этому, спецификация для UTF-8 может быть хорошим способом «понюхать», если строка была закодирована в UTF-8 ... Или это может быть допустимая строка в любой другой кодировке. ..

Например, данные [EF BB BF 41 42 43] могут быть следующими:

  • Допустимая ISO-8859-1 строка «ï» ¿ABC »
  • Допустимая UTF-8 строка "ABC"

Таким образом, хотя может быть круто распознать кодировку содержимого файла по первым байтам, вы не должны полагаться на это, как показано в примере выше

Кодировки нужно знать, а не угадывать.

229
ответ дан 22 November 2019 в 21:21
поделиться

Чем отличаются UTF-8 и UTF-8 без спецификации?

Краткий ответ: в UTF-8 спецификация кодируется как байты EF BB BF в начале файла.

Длинный ответ:

Первоначально ожидалось, что Unicode будет закодирован в UTF-16 / UCS-2. Спецификация была разработана для этой формы кодирования. Когда у вас есть 2-байтовые блоки кода, необходимо указать, в каком порядке находятся эти два байта, и обычным соглашением для этого является включение символа U + FEFF в качестве «метки порядка байтов» в начале данных. Символ U + FFFE не назначается навсегда, поэтому его присутствие можно использовать для обнаружения неправильного порядка байтов.

UTF-8 имеет один и тот же порядок байтов независимо от порядка байтов платформы, поэтому отметка порядка байтов не требуется. Однако это может произойти (как последовательность байтов EF BB FF ) в данных, которые были преобразованы в UTF-8 из UTF-16, или как «подпись», чтобы указать, что данные относятся к UTF-8.

Что лучше?

Без. Как ответил Мартин Кот, стандарт Unicode не рекомендует этого. Это вызывает проблемы с программным обеспечением, не поддерживающим спецификации.

Лучший способ определить, является ли файл UTF-8, - это выполнить проверку достоверности. UTF-8 имеет строгие правила относительно того, какие последовательности байтов допустимы, поэтому вероятность ложного срабатывания незначительна.Если последовательность байтов выглядит как UTF-8, вероятно, так оно и есть.

48
ответ дан 22 November 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: