powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Несколько глупых вопросов по std::string и std::wstring
25 сообщений из 125, страница 4 из 5
Несколько глупых вопросов по std::string и std::wstring
    #40021881
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78ascii таблица не там хранится?

Ты не поверишь, но там нет даже ascii. Одни битики с байтиками в пачках разного размера.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021882
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отсылка к ASCII-Z строкам полезна только в том случае когда мы дёргаем функции ядра ОС
и в этому случае нам уже ну "никак не вырутиться".
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021919
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот как раз ядра без особых проблем работают с UTF-8.
Именно потому, что UTF-8 полностью сохраняет семантику "массив ненулевых байт, завершаемый нулевым (байтом)".
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021927
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
maytonУ тебя-ж не возникает желания переписать integer ?

Довольно сложно переписать процессорный тип. А вот строки в процессоре нет - вольная воля.

Как был Си продвинутым ассемблером, так и плюсы его не изменили.Причем процессор? В дельфи, java строка это класс.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021930
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Давно уже придуман юникод, но ascii древнее, кое-где еще живет.

в string, как я понимаю, utf8, а в wstring - unicode ?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021936
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78
Dima T
Давно уже придуман юникод, но ascii древнее, кое-где еще живет.

в string, как я понимаю, utf8, а в wstring - unicode ?

в wstring utf16, они оба юникод

UTF - Unicode Transformation Format
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021938
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насчёт конвертации:
Код: plaintext
1.
2.
3.
4.
// Note that the standard C++ strings have standard conversion functions that are portable:
wstring_convert<codecvt_utf8_utf16<wchar_t>, wchar_t> conversion;
wstring s = conversion.from_bytes(z.c_str());
string mbs = conversion.to_bytes(L"ÆƆ");


ещё:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
// http://scrutator.me/post/2013/12/29/various_literals.aspx
Литералы являются не единственным добавлением относящемся к unicode. Получение строки содержащей кодированный unicode это замечательно, но их ведь надо как-то использовать; что у нас есть для работы с unicode? А есть у нас, прямо скажем, крайне мало:

Новые фасеты для преобразования между добавленными кодировками unicode: std::codecvt_utf8<>, std::codecvt_utf16<> и std::codecvt_utf8_utf16<>
std::wstring_convert – класс для перекодирования строки в одной кодировке в другую; использует вышеупомянутые фасеты.
std::wbuffer_convert – класс для создания потокового буфера, с помощью которого можно осуществлять операции ввода\вывода с автоматическим перекодированием; использует вышеупомянутые фасеты.

// Пример:
using convertor = std::codecvt_utf8_utf16<wchar_t>;
std::string utf16ToUtf8(const std::wstring& utf16)
{
using CStr = std::string;
using CWideStr = std::wstring;
// convert UTF-8 string to wstring
CWideStr utf8_to_wstring(const CStr &str)
{
    std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
    return myconv.from_bytes(str);
}

// convert wstring to UTF-8 string
    std::wstring_convert<convertor, wchar_t> convert;
    return convert.to_bytes(utf16.c_str());
}

std::wstring utf8ToUtf16(const std::string& utf8)
{
    std::wstring_convert<convertor, wchar_t> utf16conv;
    return utf16conv.from_bytes(utf8.c_str());
}
// В примере используется wchar_t, т.к. пример из Visual Studio где его размер 2 байта.

// Новые фасеты позволяют выполнить конвертации следующих типов:
UTF-8 &#8596; UCS-2 с использованием codecvt_utf8<char16_t> или codecvt_utf8<wchar_t> если sizeof(wchar_t) == 2;
UTF-8 &#8596; UTF-32 с использованием codecvt_utf8<char32_t> или  codecvt_utf8<wchar_t> если sizeof(wchar_t) == 4;
UTF-16 &#8596; UCS-2 с использованием codecvt_utf16<char16_t> или  codecvt_utf16<wchar_t> если sizeof(wchar_t) == 2;
UTF-16 &#8596; UTF-32 с использованием codecvt_utf16<char32_t> или  codecvt_utf16<wchar_t> если sizeof(wchar_t) == 4;
UTF-8 &#8596; UTF-16 с использованием codecvt_utf8_utf16<char16_t> или  codecvt_utf8_utf16<wchar_t> если sizeof(wchar_t) == 2;
// Список был взят отсюда: http://stackoverflow.com/questions/9476641/with-c11-do-i-still-need-a-non-standard-string-manipulation-library-for-unico

Я думаю, что не буду не прав, если скажу, что в C++ как не было поддержки unicode, так её и нет. Да эти новшества лучше чем ничего, но это никак не отменяет того, что для нормальной.
поддержки unicode в приложении нам всё равно придётся использовать ICU (http://site.icu-project.org/) и ждать, когда комитет соблаговолит добавить полноценную поддержку в язык.
Ведь в современном мире мульти-культурные приложения всегда в выигрыше, в сравнении со своими монокультурными аналогами.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021942
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
говорят
авторwchar_t следует избегать практически во всех случаях (кроме тех, когда происходит взаимодействие с Windows API).
а что будет в мультиязычных проектах, или если в какой-то либе wchar_t ?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021943
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78
говорят
авторwchar_t следует избегать практически во всех случаях (кроме тех, когда происходит взаимодействие с Windows API).

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

Исторически сложилось что MS не как все. WinAPI (и другие продукты MS) используют UTF-16, а ПО и библиотеки других разработчиков в основном UTF-8.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021944
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл уточнить - речь исключительно про линух

с винды бежать надо подальше. Вот неплохая статья.
авторНе так давно озадачился вопросом кроссплатформенной работы со строками в приложениях c++. Задача была, грубо говоря, поставлена как регистронезависимый поиск подстроки в любой кодировке на любой платформе.

Итак, первое с чем пришлось понять — что со строками в Линуксе нужно работать в кодировке UTF-8 и в типе std::string, а в Windows строки должны быть в UTF-16LE (тип std::wstring) . Почему? Потому что это by design операционных систем. Хранить строки в std::wstring в Линуксе крайне накладно, поскольку один символ wchar_t занимает 4 байта (в Windows — 2 байта), а работать std::string в Windows нужно было во времена Windows 98. Для работы со строками определяем свой платформонезависимый тип:
Код: plaintext
1.
2.
3.
4.
5.
#ifdef _WIN32
typedef std::wstring mstring;
#else
typedef std::string mstring;
#endif // _WIN32
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021964
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Исторически сложилось что MS не как все. WinAPI (и другие продукты MS) используют UTF-16,

какое отношение к WINAPI имеет Java и Javascript?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021973
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
Dima T
Исторически сложилось что MS не как все. WinAPI (и другие продукты MS) используют UTF-16,

какое отношение к WINAPI имеет Java и Javascript?

Понятия не имею.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021974
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78
забыл уточнить - речь исключительно про линух
ну а тогда в чем вопрос?
Если линукс то берем std::string.
Если винда и линукс то неизбежно директива компилятору if винда... else...
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021975
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Исторически сложилось что MS не как все.
Уже вливается в основное русло.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40021979
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
Dima T
Исторически сложилось что MS не как все.
Уже вливается в основное русло.

Под капотом все-равно UTF-16 остается. Со времен Win98 (может и W95) WinAPI функция при наличии строк в параметрах имеет две версии FuncA() и FuncW(), соответственно ANSII и WideChar (UTF-16). Как утверждают в книжках в Win98 основной была FuncA(), а FuncW() просто обертка с конвертацией и вызовом FuncA(). Но начиная с Win2000 все стало с точностью до наоборот FuncW() стала основной, а FuncA() оберткой.

Не думаю что MS ядро виндовса перепишет на UTF-8, скорее всего если что и будут делать, то ограничатся комплектом оберток.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40022066
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC SharpВ дельфи, java строка это класс.

За Яву не скажу, но в Дельфи строка это обёртка для массива байт.

В очень старых дельфях это был массив байт с длиной в нулевом элементе.
В умеренно старых дельфях это был указатель на null-terminated массив с дополнительными полями длины и счётчика ссылок по отрицательным смещениям.
В современных дельфях это простой указатель на null-terminated массив UTF-16.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40022082
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
PetroNotC SharpВ дельфи, java строка это класс.

За Яву не скажу, но в Дельфи строка это обёртка для массива байт.
Главное что снаружи удобный класс.
А внутри прячем что угодно
авторСимволы со значениями, которые находятся за пределами 16-битного диапазона и в диапазоне от 0x10000 до 0x10FFFF, называются дополнительными символами и определяются как пара charзначений.
https://stackoverflow.com/questions/31206851/how-much-memory-does-a-string-use-in-java-8
https://docs.oracle.com/javase/tutorial/i18n/text/unicode.html
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024191
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace

Каждую простейшую стандартную операцию над текстом придётся отдельно гуглить и писать свои реализации? Это же капец, не?

Весёлая тема. Посмеялся с твоих коментов. Да, это капец, но мы так живём.

Можешь посмотреть библиотеку Boost String Algorithms .
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024342
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модератор: Так. Никого мы обсуждать не будем. Не личности и не образование.

И коверкать не надо. Это - прописано в правилах форума.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024350
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
tip78
забыл уточнить - речь исключительно про линух
ну а тогда в чем вопрос?
Если линукс то берем std::string.
Если винда и линукс то неизбежно директива компилятору if винда... else...

wstring так то malloc делает на каждый чих, в отличие от string, который минимум раз выделяет (но это опять же на линухе тестировалось)
значит все виндузятники обречены быть медленнее линуха ещё и из-за строк?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024353
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтоб виндузятники уж точно-точно были оберчены - нужен некий показательный бенчмарк
со строками.

А с бенчмарками есть проблема. Их - сложно обосновать.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024354
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78
PetroNotC Sharp
пропущено...
ну а тогда в чем вопрос?
Если линукс то берем std::string.
Если винда и линукс то неизбежно директива компилятору if винда... else...

wstring так то malloc делает на каждый чих, в отличие от string, который минимум раз выделяет (но это опять же на линухе тестировалось)
значит все виндузятники обречены быть медленнее линуха ещё и из-за строк?

Это что ещё за бред? Откуда такие выводы про работу с памятью?
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024357
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78wstring так то malloc делает на каждый чих, в отличие от string, который минимум раз выделяет

А тебя не смущает, что это специализации одного темплейта, то есть код у них абсолютно
одинаковый?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024360
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78
PetroNotC Sharp
пропущено...
ну а тогда в чем вопрос?
Если линукс то берем std::string.
Если винда и линукс то неизбежно директива компилятору if винда... else...

wstring так то malloc делает на каждый чих, в отличие от string, который минимум раз выделяет (но это опять же на линухе тестировалось)
значит все виндузятники обречены быть медленнее линуха ещё и из-за строк?

Кстати, по идее, работа с utf-16 должна быть быстрее чем работа с utf-8. А быстрее всего utf-32.
Так что текстовые процессоры на std::wstring должны обгонять аналоги на std::string. Хотя я тут не уверен, конечно.
...
Рейтинг: 0 / 0
Несколько глупых вопросов по std::string и std::wstring
    #40024363
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

tip78wstring так то malloc делает на каждый чих, в отличие от string, который минимум раз выделяет

А тебя не смущает, что это специализации одного темплейта, то есть код у них абсолютно
одинаковый?..

Не специализация. Инстанцирование (явное). Если бы это были специализации, то код у них был бы разный.
...
Рейтинг: 0 / 0
25 сообщений из 125, страница 4 из 5
Форумы / C++ [игнор отключен] [закрыт для гостей] / Несколько глупых вопросов по std::string и std::wstring
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]