powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / C++ [игнор отключен] [закрыт для гостей] / std::ofstream и char8_t
25 сообщений из 40, страница 1 из 2
std::ofstream и char8_t
    #40084357
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не компилируется вывод u8 строк:

Код: plaintext
1.
2.
ofstream out;
out << u8"Привет."


MSVC + включён latest draft версия C++.

А что делать-то? Ну кроме явного приведения к char *. :)
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084438
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я чувствую, что в С++20 нас ждёт глобальный песец. Вот именно из-за введения типов
аля char8_t и std::u8string. Дураками будут выглядеть все, кто написал u8 или вообще
использовал utf-8 без особой необходимости.

А пользователи std::wstring будут хитро ухмыляться себе под нос.
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084439
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravА пользователи std::wstring будут хитро ухмыляться себе под нос.

Ага, они-то на неспособность её вывестись в std::cout наступили гораздо раньше...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084446
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravА пользователи std::wstring будут хитро ухмыляться себе под нос.

Ага, они-то на неспособность её вывестись в std::cout наступили гораздо раньше...

В том то и дело, что они решили эту проблему лет 20-ть назад (std::wcout).

Сейчас я наблюдаю шедевральное приключение. В MSVC если файл исходника в
utf-8 without BOM, то и строка "Привет" в программе в кодировке utf-8. Если файл
utf-8 with BOM, то строка в кодировке Windows-1251.

Возможно я что-то перепутал и тогда всё наоборот. При этом префикс u8 не даёт
никакой определённости и его результат зависит от кодировки файла. Ещё существет
#pragma, которая явно задаёт кодировку строк в utf-8.

При этом если файл исходника utf-8 without BOM, то кодировка широких символов
L"Привет" слетает — оно не работает. Или не работало недавно.

Сейчас ещё добавятся типы char8_t и std::u8string и тогда количество вариантов
явно увеличится. Скоро полетит вообще весь код, где написано u8"Операция Ы".
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084449
так ведь работает всё:
Код: plaintext
1.
2.
    ofstream out("file.txt");
    out << "Привет.\n";
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084451
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В ideone под С++14 - нормас.
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084453
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravСейчас я наблюдаю шедевральное приключение. В MSVC если файл исходника в
utf-8 without BOM, то и строка "Привет" в программе в кодировке utf-8. Если файл
utf-8 with BOM, то строка в кодировке Windows-1251.

"О, сколько нам открытий чудных..."

Каким способом по-твоему компилятор должен угадать кодировку исходника чтобы привеcти твой
литерал в запрошенную тобой utf-8?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084454
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravСейчас я наблюдаю шедевральное приключение. В MSVC если файл исходника в
utf-8 without BOM, то и строка "Привет" в программе в кодировке utf-8. Если файл
utf-8 with BOM, то строка в кодировке Windows-1251.

"О, сколько нам открытий чудных..."

Каким способом по-твоему компилятор должен угадать кодировку исходника чтобы привеcти твой
литерал в запрошенную тобой utf-8?..

Давай по другому? Программисты на Шарпе испытывают такие вселенские проблемы?
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084455
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
В ideone под С++14 - нормас.

Конечно. Речь идёт о включённой опции "Preview - Features from the Latest C++ Working Draft (/std:c++latest)" в Студии.
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084456
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravПрограммисты на Шарпе испытывают такие вселенские проблемы?

Шарпеи пишут исходники в редакторах, отличных от среды, автоматически (принудительно)
сохраняющей их в кодировке UTF-8 с ВОМ?

Зачем, по-твоему, у компиляторов есть ключ для указания кодировки исходника?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084457
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravПрограммисты на Шарпе испытывают такие вселенские проблемы?

Шарпеи пишут исходники в редакторах, отличных от среды, автоматически (принудительно)
сохраняющей их в кодировке UTF-8 с ВОМ?

Зачем, по-твоему, у компиляторов есть ключ для указания кодировки исходника?..

Программисты Java тоже в 99% случаев используют исходники в UTF-8 (как умолчательный тип кодировки).
Хотя бывает из левых репозитариев залетают сорцы в 1251 но обычно среда подсказывает о нестандартной
кодировке. И ее фиксят. И есть внутренние соглашения на проектах о том что вся команда обычно использует одну
кодировку. Кодировка вобщем - это опция компиллятора или сборщика.
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084458
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
В ideone под С++14 - нормас.

Конечно. Речь идёт о включённой опции "Preview - Features from the Latest C++ Working Draft (/std:c++latest)" в Студии.

А если собрать твой исходник с помощью Command Line (cl) ?
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084459
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravПрограммисты на Шарпе испытывают такие вселенские проблемы?

Шарпеи пишут исходники в редакторах, отличных от среды, автоматически (принудительно)
сохраняющей их в кодировке UTF-8 с ВОМ?

Зачем, по-твоему, у компиляторов есть ключ для указания кодировки исходника?..

Да, тут я затупил, сорри.

Наверное, потому что в GUI Студии никогда не видел принудительной установки кодировки.
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084460
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
petrav
пропущено...

Конечно. Речь идёт о включённой опции "Preview - Features from the Latest C++ Working Draft (/std:c++latest)" в Студии.

А если собрать твой исходник с помощью Command Line (cl) ?

Да ничего там не поменяется, хоть как собирай. У строки u8"..." поменялся тип. Раньше он был char[]. Теперь он другой.
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084475
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav

Сейчас я наблюдаю шедевральное приключение. В MSVC если файл исходника в
utf-8 without BOM, то и строка "Привет" в программе в кодировке utf-8. Если файл
utf-8 with BOM, то строка в кодировке Windows-1251.
Не так. По умолчанию, при отсутствии BOM и ключей компиляции, задающих кодировку, msvc считает, что исходник в текущей кодовой странице, и исполняемый файл должен выводить строки тоже в текущей кодовой странице. Поэтому сточка остается как есть. А при наличии BOM он понимает, что исходник в utf8, но исполняемый файл все также генерируется в текущей кодовой странице.
petrav

При этом если файл исходника utf-8 without BOM, то кодировка широких символов
L"Привет" слетает — оно не работает. Или не работало недавно.
Ну да, если нет BОМ и исходная кодировка не указана явно, то строчка перекодируется не из utf8, а из текущей кодовой страницы.
Это легаси, но поведение по умолчанию нельзя изменить, потому что это сломает сборку старых проектов.

https://docs.microsoft.com/en-us/cpp/build/reference/source-charset-set-source-character-set?view=msvc-160
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084509
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,

Скорее всего пофиксят в c++23
https://rawgit.com/sg16-unicode/sg16/master/papers/p1423r2.html

Но вообще хранить многоязычный текст исходнике это плохой стиль.
Максимум что имеет смысл это разные технические литералы. Но для них u8 не нужен, они все в ascii.
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084512
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyНо для них u8 не нужен, они все в ascii.

А зачем он тогда вообще нужен?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084513
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Anatoly MoskovskyНо для них u8 не нужен, они все в ascii.

А зачем он тогда вообще нужен?

Так давно уже говорилось и повторялось, что utf-8 вообще ни для чего не нужен.
А вот вреда от него целый состав (из вагонов).
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084515
а что будет без utf-8 ?
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084516
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бабушкин зайчик
а что будет без utf-8 ?

UTF32.

Сейчас, конечно, набегут фанатики и будут рассказывать про то как они сэкономили
один мегабайт памяти с utf-8. И это всё при том, что они работают под Depeche Mode во
второй вкладке с Ютубом. И Гугл Хром прокачивает за рабочий день гигабайты.
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084517
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravUTF32.

Разбудите меня когда в Линухе появится wopen() или хотя бы fwopen()...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084518
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravUTF32.

Разбудите меня когда в Линухе появится wopen() или хотя бы fwopen()...

Вы уверены, что функция открытия файла имеет какое-то отношение к
кодировке файла? Мне кажется, что нет. Да и Линукс тут не причём.
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084519
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
А зачем он тогда вообще нужен?

u8"" нужен, если прижмет и все-таки надо получить литерал с utf8 из платформозависимой кодировки.

А дальше, зная что char8_t (результат u8 с C++20) - это utf-8 то можно построить API который utf-8 обрабатывает по-другому.
Например под виндой возможно (не знаю как на самом деле) запись utf-8 в cout через стандартный char* API не приведет к ожидаемому результату т.к. вместо перевода в wchar он выведет строку как набор 8-bit char.
Поэтому вендоры могут добавить char8_t* API (как предложено в p1423r2 выше) и реализовать перевод в кодировку поддерживаемую ОСью
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084520
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravВы уверены, что функция открытия файла имеет какое-то отношение к кодировке файла?

Я уверен, что функция открытия файла принимает на вход строку. Покажите мне, как Вы
открываете файл с именем, хранящимся в std::wstring.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
std::ofstream и char8_t
    #40084532
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravВы уверены, что функция открытия файла имеет какое-то отношение к кодировке файла?

Я уверен, что функция открытия файла принимает на вход строку. Покажите мне, как Вы
открываете файл с именем, хранящимся в std::wstring.
fopen() а что?
Это на винде надо думать какой там ширины буква в имени файла, в нормальных системах это вообще не проблема.
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / std::ofstream и char8_t
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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