Использование UTF в коде C++

Если вы ищете совпадение с «/ api / * / чем угодно» и возвращаете то, что было найдено для *, если это не «добавить»

/^\/api\/(?!add\b)(\w+)(?:\/\w+)*\/?$/i 
6
задан Martin York 14 October 2008 в 07:07
поделиться

5 ответов

Каково различие между UTF и UCS.

Кодировка UCS является зафиксированной шириной и отмечена тем, сколько байтов используется для каждого символа. Например, UCS-2 требует 2 байтов за символ. Символы с кодовыми точками вне доступного диапазона не могут быть закодированы в кодировании UCS.

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

  • Внутреннее представление в коде
  • Лучшее представление устройства хранения данных (т.е. В файле)
  • Лучше всего на проводном транспортном формате (Передача между приложением, которое может быть на различной архитектуре и иметь другую стандартную локаль),

Для современных систем, самого разумного устройства хранения данных и транспортного кодирования UTF-8. Существуют особые случаи, где другие могли бы подходить - UTF-7 для старых почтовых серверов, UTF-16 для плохо записанных текстовых редакторов - но UTF-8 наиболее распространен.

Предпочтительное внутреннее представление будет зависеть от Вашей платформы. В Windows это - UTF-16. В UNIX это - UCS-4. У каждого есть его положительные стороны:

  • Строки UTF-16 никогда не используют больше памяти, чем строка UCS-4. При хранении многих больших строк символами, прежде всего, в основной многоязычной плоскости (BMP) UTF-16 потребует намного меньшего количества пространства, чем UCS-4. Вне BMP это будет использовать ту же сумму.
  • О UCS-4 легче обосновать. Поскольку символы UTF-16 могли бы быть разделены по нескольким "суррогатным парам", это может быть сложно для корректного разделения или представить строку. Текст UCS-4 не имеет этой проблемы. UCS-4 также действует во многом как текст ASCII в "символьных" массивах, таким образом, алгоритмы существующего текста могут быть портированы легко.

Наконец, некоторые системы используют UTF-8 в качестве внутреннего формата. Это хорошо, если необходимо взаимодействовать с существующим ASCII - или системы ISO-8859-based, потому что ПУСТЫЕ байты не присутствуют посреди текста UTF-8 - они находятся в UTF-16 или UCS-4.

8
ответ дан 8 December 2019 в 18:43
поделиться

Я предложил бы:

  • Для представления в коде, wchar_t или эквивалентный.
  • Для представления устройства хранения данных, UTF-8.
  • Для проводного представления, UTF-8.

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

2
ответ дан 8 December 2019 в 18:43
поделиться

Во внутреннем представлении в коде необходимо сделать это и для европейских и для неевропейских символов:

\uNNNN

Символы в диапазоне \u0020 к \u007E и определенному пробелу (например, конец строки) могут быть записаны как обычные символы. Что-либо выше \u0080, если Вы пишете это как обычный символ затем, это скомпилирует только в Вашей кодовой странице (например, хорошо во Франции, но врывающийся Россию, хорошо в России, но врывающийся Японию, хорошо в Китае, но прерывание США, и т.д.).

0
ответ дан 8 December 2019 в 18:43
поделиться

UTC является Всемирное координированное время, не набор символов (я не нашел набора символов под названием UTC).

Для внутреннего представления можно хотеть использовать wchar_t для каждого символа и станд.:: wstring для строк. Они используют точно 2 байта для каждого символа, таким образом ища, и произвольный доступ будет быстр.

Для устройства хранения данных, если большинством данных не является ASCII (т.е. код> = 128), можно хотеть использовать UTF-16, который является почти тем же, как сериализировано wstring и wchar_t.

Так как UTF-16 может быть с прямым порядком байтов или с обратным порядком байтов, для проводного транспорта, попытаться преобразовать его в UTF-8, который является архитектурно-независимым.

0
ответ дан 8 December 2019 в 18:43
поделиться
Другие вопросы по тегам:

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