|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.07.2014, 18:05 | #1 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Строковый литералы
Здравствуйте.
Из справочника: Код:
Можно подумать - все дело в кодировке исходных кодов (они у меня utf8), ведь для компилятора это просто цифры. Тогда зачем нужны префиксы? Почему и как компилятор соображает в такой ситуации: L"Hello", увеличивая её в размере. В windows на qtcreator не выходит поэкспериментировать с кодировками, сохраняю, например, один символ в utf-32, а размер файла 12 байт. Что такое Narrow multibyte string literal? Какая кодировка? |
11.07.2014, 09:22 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
тип данных у 1 и 3 один и тот же, а вот содержимое будет разным.
Отличия можете увидеть используя функции strlen() или puts(). Компилятор "соображает" увидев префикс L что каждый символ должен быть 2 байта а не один. Префиксы нужны, чтобы знать как закодировать слово "цапля". В исходнике разницы не будет, поскольку сам исходник сохраняется какой-то одной кодировке. А вот если вы запишете все эти литералы в один файл (скажем через fwrite) и откроете файл hex редактором, то сразу увидите отличия. |
11.07.2014, 09:58 | #3 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
А вы пробывали? Кодировка исходников utf-8? Повторюсь, строки одинаковые. Думаю что Narrow multibyte string это и есть кодировка исходников.
Еще интересный момент: почему в std нет string'a для utf-8, при наличии для utf-16 и utf-32? Код:
Последний раз редактировалось 220Volt; 11.07.2014 в 10:00. |
11.07.2014, 10:14 | #4 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Плохой пример, поищу символы с более чем 2х байтовым размером.
|
11.07.2014, 11:45 | #5 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Приведите минимальный компилирующийся код, который проиллюстрирует проблему.
|
11.07.2014, 11:59 | #6 |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Не то чтобы проблемы, скорее вопросы:
1. Что такое Narrow multibyte string literal (какая кодировка)? 2. Почему std::string не поддерживает utf-8, есть ли в планах? |
11.07.2014, 12:34 | #7 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
1) Любая... например utf7 и utf8, ascii. Все это - char. И длинна одинаковой строки в различных кодировках может быть разной (в байтах).
2) Зачем std::string поддерживать utf8? В уверенны, что std::string вообще поддерживает кодировку? Не путайте UTF16 и UCS16 - это две большие разницы. Кодировка исходников зависит от желаний и возможностей редактора и компилятора. Последний раз редактировалось waleri; 11.07.2014 в 12:36. |
11.07.2014, 13:35 | #8 | |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Цитата:
2. Скажите, индексация в строке, метолы length() и другое одинаковы у ascii строке и utf-8 строки (кириллица)? Вот для этого std::string должен поддерживать именно utf-8, а не просто char. |
|
11.07.2014, 16:15 | #9 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
1)
Библиотека ожидает определенный тип - char, wchar_t, int, и т.д. В языке С++ нет типа utf, и т.д, есть указатель на char или wchar_t и производные от них. Каждый из приведенных префиксов использует свой тип, но если типы совппадают, как для UTF8, тогда компилятор ничем не поможет. 2) Количество БУКВ совпдаает, но количество БАЙТ - нет. length возвращает количество БАЙТ. |
11.07.2014, 16:49 | #10 | |
Форумчанин
Регистрация: 14.12.2012
Сообщений: 668
|
Цитата:
2. Легко ведь проверяется Код:
https://developer.gnome.org/gtkmm-tu...string.html.en |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Строковый массив | impulsgraw | C# (си шарп) | 4 | 19.11.2011 12:43 |
Строковый тип | Krasopetka | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 17.11.2011 21:17 |
Строковый файл | ensoleille | Помощь студентам | 5 | 15.07.2011 00:10 |
Строковый тип | dusya9992 | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 26.08.2010 00:53 |
строковый тип | gessi | Помощь студентам | 3 | 25.11.2009 09:40 |