Строковый литерал широкого символа запускается с L как L “Привет, Мир” гарантировал, что был закодирован в Unicode?

От Руководства веб-контента Safari Соединения Разработчика Apple для страницы iPhone, Определяющей Значок Веб-страницы для веб-Клипа ...

пользователь может добавить, что веб-приложение или веб-страница связываются с главным экраном. Эти ссылки, представленные значком, называют веб-клипами. Выполните эти простые шаги для определения значка для представления веб-приложения или веб-страницы на iPhone.

Для определения значка для всего веб-сайта (каждая страница на веб-сайте) поместите файл значка в формат PNG в корневой папке документов, названной apple-touch-icon.png.

, Чтобы определить значок для единственной веб-страницы или заменить значок веб-сайта определенным для веб-страницы значком, добавляет элемент ссылки к веб-странице как в:

В вышеупомянутом примере, замените custom_icon.png своим именем файла значка.

Видят, "Создают Значок для Вашего веб-приложения или Веб-страницы" в iPhone Human Interface Guidelines в iPhone Human Interface Guidelines для метрик значка веб-страницы.

Примечание: веб-функция клипа доступна в iPhone 1.1.3 и позже.

13
задан alisianoi 31 October 2014 в 09:15
поделиться

3 ответа

Символ L перед строковым литералом просто означает, что каждый символ в строке будет сохранен как wchar_t . Но это не обязательно подразумевает Unicode. Например, вы можете использовать строку широких символов для кодирования GB 18030 , набора символов, используемого в Китае, который похож на Unicode. В стандарте C ++ 03 ничего не говорится о Unicode (однако C ++ 11 определяет типы символов Unicode и строковые литералы ), поэтому вам нужно правильно представлять строки Unicode в C ++. 03.

Что касается строковых литералов, в главе 2 (Лексические соглашения) стандарта C ++ упоминается «базовый исходный набор символов», который в основном эквивалентен ASCII. Таким образом, это по существу гарантирует, что "abc" будет представлен в виде 3-байтовой строки (без учета нуля), а L "abc" будет представлен как 3 * sizeof (wchar_t) -байтная строка. широких символов.

В стандарте также упоминаются «универсальные имена символов», которые позволяют ссылаться на символы, отличные от ASCII, в шестнадцатеричной системе \ uXXXX . Эти «универсальные имена-символы» обычно отображаются напрямую в значения Unicode, но стандарт не гарантирует, что они должны это сделать. Однако вы можете по крайней мере гарантировать, что ваша строка будет представлена ​​как определенная последовательность байтов , используя универсальные имена символов. Это гарантирует вывод Unicode при условии, что среда выполнения поддерживает Unicode, имеет установленные соответствующие шрифты и т. Д.

Что касается строковых литералов в исходных файлах C ++ 03, опять же нет никаких гарантий. Если у вас есть строковый литерал Unicode в вашем коде, который содержит символы вне диапазона ASCII, ваш компилятор должен решить, как интерпретировать эти символы. Если вы хотите явно гарантировать, что компилятор «поступит правильно», вам нужно использовать нотацию \ uXXXX в строковых литералах.

38
ответ дан 1 December 2019 в 18:13
поделиться

В стандарте не упоминаются форматы кодирования для строк.

Взгляните на ICU от IBM (бесплатно). http://site.icu-project.org/

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

В C ++ 03 не упоминается юникод (в будущем C ++ 0x упоминается). В настоящее время вам нужно либо использовать внешние библиотеки ( ICU , UTF-CPP и т. Д.), Либо создать собственное решение с использованием кода для конкретной платформы. Как уже упоминалось, кодировка wchar_t (или даже размер) не указана. Следовательно, кодировка строкового литерала зависит от реализации. Однако вы можете указать кодовые точки Unicode в строковых литералах, используя экранирующие символы \ x \ u \ U.

Обычно приложения Unicode в Windows используют wchar_t (с кодировкой UTF-16) в качестве внутреннего символьного формата, потому что это упрощает использование Windows API. Сама Windows использует UTF-16. В свою очередь, приложения Unicode для Unix / Linux обычно используют char (с кодировкой UTF-8) внутри себя. Если вы хотите обмениваться данными между разными платформами, UTF-8 является обычным выбором для кодирования передачи данных.

2
ответ дан 1 December 2019 в 18:13
поделиться
Другие вопросы по тегам:

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